web-dev-qa-db-ja.com

LiveData(MutableLiveData)およびデータバインディングの立ち上がりエラー(オブザーバーメソッドの呼び出しに失敗しました)

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)

この紛らわしいエラーで私を助けてください!

6
Siamak Ferdos

セットAndroid:textには文字列値を使用する必要があります

      <TextView
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:text="@{String.valueOf(viewmodel.student.id)}" />
1
Ahmad Aghazadeh