#android #viewmodel #android-livedata #livecycle
Вопрос:
Я столкнулся с этой проблемой Android , которая не может идентифицировать класс ViewModelProvider, и я искал здесь в stackoverflow об этой же проблеме, и все ответы не помогли ,
вот мои зависимости :
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.jakewharton:butterknife:10.2.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
def lifecycle_version = "2.4.0-rc01"
def arch_version = "2.1.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
// Lifecycles only (without ViewModel or LiveData)
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
// Annotation processor
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
и это мой класс ViewModel :
package com.example.myapplication.UI;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import pojo.Movie;
public class MovieViewModel extends ViewModel {
MutableLiveData<String> movieMutableLiveData= new MutableLiveData<>();
private Movie getData(){
return new Movie("lina ");
}
public void getMovieName(){
String name= getData().getName();
movieMutableLiveData.setValue(name);
}
}
и это моя основная деятельность :
package com.example.myapplication.UI;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.AndroidViewModel;
import com.example.myapplication.R;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
MovieViewModel movieViewModel;
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.button)
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
button.setOnClickListener(this);
movieViewModel= new ViewModelProvider(this).get(MovieViewModel.class);
movieViewModel.movieMutableLiveData.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
textView.setText(s);
}
});
}
@Override
public void onClick(View v) {
if (v.getId()==R.id.button){
movieViewModel.getMovieName();
}
}
}
я , кажется , не могу понять , в чем проблема, потому что я скопировал те же зависимости с официального сайта Android, и проблема все та же, даже ответы здесь, на форуме, не смогли решить эту проблему, пожалуйста, помогите
Комментарии:
1. Вы, кажется, пропускаете
import
заявление:import androidx.lifecycle.ViewModelProvider;
2. даже после того, как я добавил инструкцию import, я получил ту же ошибку
3. Вы пробовали очистить и перестроить проект?
4. Попробуйте вернуться к тому, чтобы
lifecycle_version
быть2.3.1
вместо RC.5. это сработало , спасибо, я изменил версию жизненного цикла на 2.3.0