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;
}

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


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'

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"
}

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)

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"

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"

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)


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


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

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);


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


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.