Tidak dapat menyelesaikan simbol ViewModelProviders di AppCompatActivity

122

Hei, saya mencoba membuat ViewModel saya berfungsi, tetapi sejauh ini tidak berhasil. Android Studio menunjukkan kesalahan Cannot resolve symbol 'ViewModelProviders'.

Setiap pertanyaan lain saya menemukan tentang topik ini mengoreksi extends Activityuntuk extends AppCompatActivity, tapi saya memperpanjang tepat. Tidak yakin apa yang saya lewatkan ...
Kode saya didasarkan pada video YouTube ini

MainActivity.java

public class MainActivity extends AppCompatActivity implements
    TileAdapter.TileAdapterOnClickHandler {


private BaseViewModel viewModel;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //set Toolbar
    Toolbar myToolbar = findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);


    //initialize viewModel
    viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);

BaseViewModel.java

public class BaseViewModel extends ViewModel {

private Movie[] mMovie;

public void init (Movie[] movies){
    this.mMovie = movies;
}

public Movie[] getMovie() {
    return mMovie;
}
Sheler
sumber
1
"Tidak dapat menyelesaikan simbol" berarti Anda tidak memiliki importpernyataan, atau Anda memilikinya tetapi tidak memiliki ketergantungan dalam penyiapan Gradle Anda.
CommonsWare
9
Periksa apakah Anda memiliki dependecy untuk android.arch.lifecycle: extensions di build.gradle
Muthukrishnan Rajendran
Entah dia menggunakan beberapa perpustakaan dan menambahkan ketergantungan dalam file gradle sehingga dia dapat mengimpor ViewModel atau dia memiliki kelas khusus di ViewModelbawah paket yang berbeda dan dia mengimpornya dari sana
Akshay Katariya
Tidak memiliki ekstensi sebagai ketergantungan. Terima kasih @MuthukrishnanRajendran
Sheler

Jawaban:

203

Saya tidak memiliki kedua dependensi dalam build saya, itulah masalahnya.

implementation "android.arch.lifecycle:extensions:1.1.0"
implementation "android.arch.lifecycle:viewmodel:1.1.0"

Terima kasih @Muthukrishnan Rajendran

Sheler
sumber
7
@Sheler Jawaban Anda benar tetapi dokumen salah. Dalam dokumentasi disebutkan bahwa ViewModel dan LiveDat keduanya dalam implementasi "android.arch.lifecycle: extensions: 1.1.1"
Pritish
2
Hmm solusi ini masih belum menyelesaikan masalah saya. Saya memiliki implementasi 'android.arch.lifecycle: extensions: 1.1.1' di app gradle dan allprojects saya {repositories {google () jcenter ()}} Apakah ada hal lain yang perlu ditambahkan?
musterjunk
1
Saya melihat kelas ViewModelProvider tetapi tidak memiliki metode .of (). ViewModelProviders masih belum ditentukan. Saya menggunakan Mac jika itu penting.
musterjunk
Apakah ada min sdk atau definisi java 8 yang perlu ditambahkan ke proyek?
musterjunk
Lupakan. Pastikan Anda menyinkronkan file gradles Anda jika tidak muncul.
musterjunk
96

Jika Anda menggunakan androidxAnda membutuhkan ini:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
Babao
sumber
Untuk orang lain yang mengalami masalah ini, Anda juga memerlukan ini di aplikasi Anda gradle: apply plugin: 'androidx.navigation.safeargs' dan ini di android gradle: classpath "android.arch.navigation: navigation-safe-args-gradle-plugin : 1.0.0-alpha06 "Jika Anda kesulitan di mana harus meletakkan benda-benda ini, lihat di aplikasi demo android-sunflower dari google.
findusl
1
periksa tautan ini untuk versi androidx terbaru developer.android.com/jetpack/androidx/migrate
user2301281
Apa kebodohannya! ViewModelProvider tersedia tanpa ketergantungan, tetapi untuk ViewModelProvider kita membutuhkan ketergantungan tambahan.
Rahul Rastogi
15

Jika Anda menggunakan kompilasi sdk versi 28 atau lebih tinggi, Anda hanya perlu menambahkan satu dependecy untuk mendapatkan ViewModeldanLiveData

dependencies {
    //...
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}
Sanjeev
sumber
Untuk mengetahui versi terbaru android.arch.lifecycle:extensionsAnda dapat mencari extensionsdi maven.google.com/web/index.html dan melihat versi terbaru
Sanjeev
11

android.arch.lifecycle: extensions sudah tidak digunakan lagi

def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"

Membuat instance viewmodel seperti ini:

Jawa

Yourclass obj = new ViewModelProvider(context).get(ClassViewModel.class);

Kotlin

var obj = ViewModelProvider(context).get(ClassViewModel::class.java)
Sumit Shukla
sumber
5

Anda harus menambahkan pustaka di build.gradle proyek Anda

def lifecycle_version = "2.0.0"

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
Fatih Çakıroğlu
sumber
5

Saya menyelesaikan masalah ini dari dokumentasi resmi Android . Tambahkan di bawah kebuild.grale

def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
shellhub.dll
sumber
5

Dalam kasus saya (Android Studio 3.6.3), AppCompatActivityuntuk berhasil melakukan:

MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);

dibutuhkan kedua hal berikut:

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

(sendirian dengan lifecycle-extentionstidak cukup)

hata
sumber
3

Di file build.gradle, tambahkan baris ini di blok dependensi

dependencies {
...
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
//if not using java 8,use the following line
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
//if using java 8,ignore above line and add the following line
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
...
}

Contoh Gambar file build.gradle

Sulav Timsina
sumber
2

Gunakan androixperpustakaan

Perubahan

implementation 'com.android.support:appcompat-v7:28.0.0'

untuk

implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'

Kamu bisa memakai

Refactor>Migrate to AndroidX
Sebastian Duran
sumber
2

Dalam implementasi "androidx.lifecycle: lifecycle-extensions: 2.2.0" dan yang lebih baru, ViewModelProviders tidak digunakan lagi, gunakan

viewModel = ViewModelProvider(this).get(BaseViewModel.class);

atau di Kotlin

viewModel = ViewModelProvider(this).get(BaseViewModel::class.java);

dari pada

viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);
Mihai
sumber
1

Bekerja dengan baik di aplikasi saya (java) sebelumnya

loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
                .get(LoginViewModel.class);

berubah menjadi

loginViewModel = new ViewModelProvider(this,new LoginViewModelFactory()).get(LoginViewModel.class);

semoga bisa membantu

s wang
sumber
1

Dalam Kasus Saya, saya menghadapi masalah di bawah ini yaitu:

** tidak dapat mengakses androidx.lifecycle.memiliki pabrik viewmodelprovider default yang merupakan masukkan deskripsi gambar di sinisubkelas dari Nama kelas Anda, periksa jalur kelas modul Anda, periksa ketergantungan model yang bertentangan **

Saya menambahkan dependensi di bawah ini dalam proyek saya build.gradle .

def lifecycle_version = "2.2.0"

implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

Kemudian saya membuat kelas saya dalam proyek modul dan saya menghadapi masalah ini, lalu saya menambahkan pustaka ini dalam file modul build.gradle dan masalah teratasi.

Zeeshan Akhtar
sumber
0

Saya memiliki masalah yang sama. Tidak ada solusi lain yang membantu saya.

Saya menyadari bahwa saya menggunakan import androidx.lifecycle.ViewModelProvider;bukannya import androidx.lifecycle.ViewModelProviders;.

Jadi, pastikan Anda menggunakan import androidx.lifecycle.ViewModelProviders;. Itu ViewModelProvidersdengan sebuah s.

Sedrick
sumber