Ошибка: java .lang.RuntimeException: Parcel: невозможно маршалировать значение com.example.simplegraph.db. Data@453968f - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь передать объект LiveData от одного действия другому с помощью намерения, и я получаю эту ошибку. Я просто не нашел других способов сделать это.

LiveData в ViewModel:

public LiveData<List<Data>> getAllData() {
return allData;
}

Деятельность, которая помещает данные:

FloatingActionButton btn_next = findViewById(R.id.btn_next);
btn_next.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, DateListActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("Value", new ArrayList<>(dataViewModel.getAllData().getValue()));
        intent.putExtras(bundle);
        startActivity(intent);
    }
});

Деятельность который получает данные:

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
List<Data> list = (List<Data>)bundle.getSerializable("Value");
adapter.setData(list);

Logcat:

2020-04-21 09:41:15.447 5790-5790/com.example.simplegraph E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.simplegraph, PID: 5790
java.lang.RuntimeException: Parcel: unable to marshal value com.example.simplegraph.db.Data@453968f
at android.os.Parcel.writeValue(Parcel.java:1784)
at android.os.Parcel.writeList(Parcel.java:937)
at android.os.Parcel.writeValue(Parcel.java:1731)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:849)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1551)
at android.os.Bundle.writeToParcel(Bundle.java:1232)
at android.os.Parcel.writeBundle(Parcel.java:889)
at android.content.Intent.writeToParcel(Intent.java:9603)
at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4427)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1617)
at android.app.Activity.startActivityForResult(Activity.java:4551)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:4509)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:4870)
at android.app.Activity.startActivity(Activity.java:4838)
at com.example.simplegraph.ui.MainActivity$1.onClick(MainActivity.java:57)
at android.view.View.performClick(View.java:6304)
at android.view.View$PerformClick.run(View.java:24803)
at android.os.Handler.handleCallback(Handler.java:794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6635)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

Класс данных:

@Entity(tableName = "data_table")
public class Data {
@PrimaryKey(autoGenerate = true)
public int id;

public String date;

public float xValue;
public float yValue;

public Data(String date, float xValue, float yValue) {
 this.date = date;
 this.xValue = xValue;
 this.yValue = yValue;
}
// getters and setters below
}

Если не рекомендуется или вообще невозможно передавать объекты LiveData таким способом, какие еще варианты доступны? Спасибо за любую помощь.

...