ViewModelとMutableLiveDataを使用してライブデータをUIにバインドするアプリがあります。何時間も私の時間を西にした後!インターネット上のすべてのサンプルを確認して、問題の理由を見つけることができませんでした。
私の活動:
public class DetailActivity extends DaggerAppCompatActivity {
ActivityStudentBinding mViewDataBinding;
MyModel myModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_student);
mViewDataBinding.setLifecycleOwner(this);
myModel = ViewModelProviders.of(this).get(MyModel.class);
mViewDataBinding.setViewmodel(myModel);
}
そして私のモデルクラス:
public class MyModel extends ViewModel
{
public MutableLiveData<StudentData.Student> student = new MutableLiveData<>();
public MyModel() {
this.student=student;
StudentData.Student student = new StudentData().getFirstStudent();
this.student.setValue(student);
}
}
そしてレイアウト(私はここで余分なコードを掃除しました):
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools">
<data >
<variable
name="viewmodel"
type="googlearchitecturecomponents.ferdos.com.dagger211.detail.MyModel"/>
</data>
<TextView
Android:text="@{viewmodel.student.id}" />
<TextView
Android:text="@{viewmodel.student.family}" />
<TextView
Android:text="@{viewmodel.student.id}"/>
</layout>
実行時およびアクティビティの作成時に、次のエラーが発生します。
Java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {googlearchitecturecomponents.ferdos.com.dagger211/googlearchitecturecomponents.ferdos.com.dagger211.detail.DetailActivity}:Java.lang.RuntimeException:オブザーバーメソッドの呼び出しに失敗しました------ - - スタックトレース - - - - -
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2298) Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2360) Android.app.ActivityThread.access$800(ActivityThread.Java:144) Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1278) Android.os.Handler.dispatchMessage(Handler.Java:102) Android.os.Looper.loop(Looper.Java:135) Android.app.ActivityThread.main(ActivityThread.Java:5221) Java.lang.reflect.Method.invoke(Native Method) Java.lang.reflect.Method.invoke(Method.Java:372) com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899) com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
この紛らわしいエラーで私を助けてください!
セットAndroid:text
には文字列値を使用する必要があります
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{String.valueOf(viewmodel.student.id)}" />