AppCompatActivity पर प्रतीक ViewModelProviders को हल नहीं कर सकता


122

अरे मैं अपना ViewModel काम करने की कोशिश कर रहा हूं, लेकिन अब तक कोई भाग्य नहीं। Android Studio त्रुटि दिखाता है Cannot resolve symbol 'ViewModelProviders'

हर दूसरे सवाल मैं इस विषय पर पाया को सही किया गया था extends Activityकरने के लिए extends AppCompatActivity, लेकिन मैं सही एक का विस्तार कर रहा हूँ। मुझे यकीन नहीं है कि मैं क्या याद कर रहा हूं ...
मेरा कोड इस YouTube वीडियो पर आधारित है

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बयान नहीं है , या आप करते हैं लेकिन आपके ग्रेडल सेटअप में निर्भरता नहीं है।
कॉमंसवेयर

9
जांचें कि क्या आपके पास android.arch.lifecycle के लिए निर्भरता है : build.gradle में एक्सटेंशन
राजेंद्रन

या तो वह कुछ पुस्तकालय का उपयोग कर रहा है और ग्रेड फ़ाइल में निर्भरता को जोड़ा है ताकि वह ViewModel को आयात करने में सक्षम हो या उसके पास ViewModelअलग-अलग पैकेज के तहत कस्टम क्लास हो और वह इसे वहां से आयात कर रहा है
अक्षय कटारिया

निर्भरता के रूप में एक्सटेंशन नहीं था। धन्यवाद @MuthukrishnanRajendran
शेलर

जवाबों:


203

मेरे पास मेरे निर्माण में निर्भरता नहीं थी, इसलिए समस्या है।

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

धन्यवाद @ मुथुकृष्णन राजेंद्रन


7
@ उत्तर आप सही हैं लेकिन डॉक्स गलत है। प्रलेखन में यह निर्दिष्ट किया गया है कि ViewModel और LiveDat दोनों कार्यान्वयन में हैं "android.arch.lifecycle: Extension: 1.1.1"
प्रीतिश

2
हम्म इस समाधान अभी भी मेरी समस्या हल नहीं हुई है। मेरे पास ऐप्लीकेशन में 'android.arch.lifecycle: एक्सटेंशन: 1.1.1' का कार्यान्वयन है और {proositories {repositories {google () jcenter ()}} क्या कुछ और है जिसे जोड़ा जाना चाहिए?
मस्टरजंक

1
मैं ViewModelProvider वर्ग देखता हूं लेकिन इसमें .of () विधि नहीं है। ViewModelProviders अभी भी परिभाषित नहीं है। मैं एक पर हूँ MAC अगर यह मायने रखता है।
मस्टरजंक

क्या कोई मिनि sdk या जावा 8 परिभाषा है जिसे परियोजना में जोड़ा जाना है?
मस्टरजंक

कोई बात नहीं। सुनिश्चित करें कि यदि आप नहीं दिखाते हैं, तो आप अपनी gradles फ़ाइलों को सिंक करें।
मस्टरजंक

96

यदि आप उपयोग कर रहे हैं androidxतो आपको इसकी आवश्यकता है:

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

किसी और को यह समस्या होने के लिए, आपको अपने ऐप ग्रेड में भी इसकी आवश्यकता है: प्लगइन लागू करें: 'androidx.navigation.safeargs' और यह आपके एंड्रॉइड ग्रेडेल में: classpath "android.arch.navigation: नेविगेशन-सुरक्षित-args-gradle-plugin : 1.0.0-Alpha06 "यदि आपको यह समस्या है कि इन चीजों को कहां रखा जाए, तो Google से एंड्रॉइड-सूरजमुखी डेमो ऐप देखें।
findusl

1
नवीनतम Androidx संस्करण डेवलपर के
jetpack

क्या मूर्खता है! ViewModelProvider निर्भरता के बिना उपलब्ध है, लेकिन ViewModelProvider के लिए हमें एक अतिरिक्त निर्भरता की आवश्यकता है।
राहुल रस्तोगी

15

यदि आप संकलित एसडीके संस्करण 28 या उच्चतर का उपयोग कर रहे हैं, तो आपको केवल ViewModelऔर प्राप्त करने के लिए एकल निर्भरता जोड़ने की आवश्यकता हैLiveData

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

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

के नवीनतम संस्करण को जानने के लिए android.arch.lifecycle:extensionsआप खोज कर सकते हैं extensionsमें maven.google.com/web/index.html और देखो नवीनतम संस्करण
संजीव

11

android.arch.lifecycle: एक्सटेंशन्स का उपयोग घटाया गया है

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

इस तरह से viewmodel का उदाहरण बनाएं :

जावा

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

Kotlin

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

5

आपको अपनी परियोजना build.gradle में पुस्तकालय जोड़ना चाहिए

defecycle_version = "2.0.0"

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


5

मेरे मामले में (Android Studio 3.6.3), AppCompatActivityसफलतापूर्वक करने के लिए:

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

यह दोनों की जरूरत है:

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

(अकेले lifecycle-extentionsपर्याप्त नहीं था)


3

बिल्ड.ग्रेड फ़ाइल में, निर्भरता ब्लॉक में इन पंक्तियों को जोड़ें

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 फ़ाइल का नमूना चित्र


2

androixपुस्तकालयों का उपयोग करें

परिवर्तन

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

सेवा

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

आप उपयोग कर सकते हैं

Refactor>Migrate to AndroidX

2

कार्यान्वयन में "androidx.lifecycle: जीवनचक्र-विस्तार: 2.2.0" और ऊपर ViewModelProviders अपवित्र है, का उपयोग करें

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

या कोटलिन में

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

के बजाय

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


1

पहले मेरे ऐप (जावा) में ठीक काम करता है

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

में परिवर्तन

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

आशा है कि यह मदद कर सकता है


1

मेरे मामले में, मैं नीचे दिए गए मुद्दे का सामना कर रहा हूँ अर्थात्:

** androidx.lifecycle.has का उपयोग नहीं कर सकता है एक डिफ़ॉल्ट viewmodelprovider कारखाना है जो यहां छवि विवरण दर्ज करेंआपकी कक्षा के नाम का उपवर्ग है, अपने मॉड्यूल क्लासपैथ की जांच करें अपने मॉडल के परस्पर विरोधी निर्भरता की जांच करें **

मैंने अपनी परियोजना build.gradle में निर्भरता से नीचे जोड़ा ।

def lifecycle_version = "2.2.0"

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

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

फिर मैं एक मॉड्यूल प्रोजेक्ट में अपनी कक्षा बनाता हूं और मैं इस मुद्दे का सामना कर रहा हूं, फिर मैं मॉड्यूल बिल्ड.ग्रेड फ़ाइल में इन पुस्तकालयों को जोड़ता हूं और समस्या हल हो गई है।


0

मुझे भी यही समस्या थी। अन्य समाधानों में से किसी ने भी मेरी मदद नहीं की।

मुझे एहसास हुआ कि मैं import androidx.lifecycle.ViewModelProvider;इसके बजाय उपयोग कर रहा था import androidx.lifecycle.ViewModelProviders;

इसलिए सुनिश्चित करें कि आप उपयोग कर रहे हैं import androidx.lifecycle.ViewModelProviders;। यह एक के ViewModelProvidersसाथ है s

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.