AppCompatActivity'de sembol ViewModelProviders çözümlenemiyor


122

Hey ViewModel'imi çalıştırmaya çalışıyorum ama şimdiye kadar şansım yok. Android Studio hata gösteriyor Cannot resolve symbol 'ViewModelProviders'.

Ben bu konu üzerinde bulunan diğer bütün soru düzelterek edildi extends Activityiçin extends AppCompatActivity, ama doğru bir uzanan ediyorum. Neyi kaçırdığımdan emin değilim ...
Kodum bu YouTube videosuna dayanıyor

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
" importÇözülemeyen simge" ifadesi, ifadeye sahip olmadığınız veya sizde olduğu ancak Gradle kurulumunuzda bağımlılığın olmadığı anlamına gelir .
CommonsWare

9
Android.arch.lifecycle için bağımlılığınız var mı kontrol edin : build.gradle içindeki uzantılar
Muthukrishnan Rajendran

Ya bir kitaplık kullanıyor ve bağımlılığı gradle dosyasına ekledi, böylece ViewModel'i içe aktarabiliyor ya da ViewModelfarklı paket altında özel bir sınıfı var ve oradan alıyor
Akshay Katariya

Bağımlılık olarak uzantılara sahip değildi. Teşekkürler @MuthukrishnanRajendran
Sheler

Yanıtlar:


203

Yapımda her iki bağımlılık da yoktu, bu yüzden sorun.

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

Teşekkürler @Muthukrishnan Rajendran


7
@Sheler Cevabınız doğru ama dokümanlar yanlış. Belgelerde, ViewModel ve LiveDat'ın her ikisinin de "android.arch.lifecycle: extensions: 1.1.1" uygulamasında olduğu belirtilmiştir
Pritish

2
Hmm bu çözüm hala sorunumu çözmedi. Uygulama gradle ve tüm projelerinde 'android.arch.lifecycle: extensions: 1.1.1' uygulamam var {repositories {google () jcenter ()}} Eklenmesi gereken başka bir şey var mı?
musterjunk

1
ViewModelProvider sınıfını görüyorum ancak .of () yöntemine sahip değil. ViewModelProviders hala tanımlanmamıştır. Eğer önemliyse bir Mac kullanıyorum.
musterjunk

Projeye eklenmesi gereken bir min sdk veya java 8 tanımı var mı?
musterjunk

Boşver. Görünmüyorsa, gradles dosyalarınızı senkronize ettiğinizden emin olun.
musterjunk

96

Eğer kullanıyorsanız buna androidxihtiyacınız var:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'

Bu sorunu yaşayan başka biri için, buna uygulamanızın gradle'ında da ihtiyacınız var: eklenti uygulayın: 'androidx.navigation.safeargs' ve bunu android gradle: classpath "android.arch.navigation: navigation-safe-args-gradle-plugin : 1.0.0-alpha06 "Bunları nereye koyacağınız konusunda sorun yaşıyorsanız, google'dan android-sunflower demo uygulamasına bakın.
findusl

1
en son androidx sürümü geliştiricisi
user2301281

Aptallık nedir! ViewModelProvider bağımlılık olmadan kullanılabilir, ancak ViewModelProviders için ekstra bir bağımlılığa ihtiyacımız var.
Rahul Rastogi

15

Eğer derlenmiş sdk sürümü 28 kullanıyorsanız veya daha yüksek yalnızca almak için tek bağımlılığımızı eklemeniz gerekiyorsa ViewModelveLiveData

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

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}

En son sürümünü edinmek için android.arch.lifecycle:extensionsarayabilir extensionsiçinde maven.google.com/web/index.html son sürümünü görmek
Sanjeev

12

android.arch.lifecycle: uzantıların kullanımı kullanımdan kaldırıldı

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

Create örneğini böyle ViewModel arasında:

Java

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

Kotlin

var obj = ViewModelProvider(context).get(ClassViewModel::class.java)

5

projenizin build.gradle bölümüne kitaplık eklemelisiniz

def lifecycle_version = "2.0.0"

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"


5

Benim durumumda (Android Studio 3.6.3), AppCompatActivitybaşarılı bir şekilde yapmak için:

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

her ikisine de ihtiyaç vardır:

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

(tek başına lifecycle-extentionsyeterli değildi)


3

Build.gradle dosyasında, bu satırları bağımlılıklar bloğuna ekleyin

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

Build.gradle dosyasının örnek görüntüsü


2

androixKitaplıkları kullanın

Değişiklik

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

için

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

Kullanabilirsiniz

Refactor>Migrate to AndroidX

2

"Androidx.lifecycle: lifecycle-extensions: 2.2.0" ve üzeri ViewModelProviders uygulamasında kullanımdan kaldırılmıştır, şunu kullanın

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

veya Kotlin'de

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

onun yerine

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


1

Daha önce uygulamamda (java) iyi çalışıyor

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

değişiklikler

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

umarım yardımcı olabilir


1

Benim Durumumda, aşağıdaki sorunla karşı karşıyayım, yani:

** androidx.lifecycle'a erişilemiyor. Sınıf Adınızın bir görüntü açıklamasını buraya girinalt sınıfı olan varsayılan bir viewmodelprovider fabrikasına sahiptir, modül sınıf yolunuzu kontrol edin, modelinizin çakışan bağımlılıklarını kontrol edin **

Build.gradle projeme aşağıdaki bağımlılıkları ekledim .

def lifecycle_version = "2.2.0"

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

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

Daha sonra sınıfımı bir modül projesinde oluşturuyorum ve bu sorunla karşılaşıyorum, ardından bu kitaplıkları modül build.gradle dosyasına ekliyorum ve sorun çözüldü.


0

Ben de aynı sorunu yaşadım. Diğer çözümlerin hiçbiri bana yardımcı olmadı.

Ben kullanıyordum fark import androidx.lifecycle.ViewModelProvider;yerine import androidx.lifecycle.ViewModelProviders;.

Bu yüzden kullandığınızdan emin olun import androidx.lifecycle.ViewModelProviders;. Bu ViewModelProvidersbir s.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.