Отправка Arraylist объектов с помощью Parcelable - PullRequest
0 голосов
/ 26 мая 2020

Попытка использовать Parcelable для отправки Arraylist объектов между двумя действиями. Когда я пытаюсь прочитать данные из принимающей активности, я получаю ошибку ссылки на нулевой объект. Я прочитал много руководств и других потоков переполнения стека, но не могу найти, где я сделал ошибку. Любая помощь будет принята с благодарностью.

Это код моего Object

public class Workout implements Parcelable {
     private String name;
     private int time;

     public String getName() {
         return name;
     }

     public void setName(String name) {
         this.name = name;
     }

     public int getTime() {
         return time;
     }

     public void setTime(int time) {
         this.time = time;
     }

     public Workout(String name, int time){
         this.name = name;
         this.time = time;
     }

     public static final Parcelable.Creator<Workout> CREATOR = new Parcelable.Creator<Workout>() {
         public Workout createFromParcel(Parcel in) {
             return new Workout(in);
         } 

         public Workout[] newArray(int size) {
             return new Workout[size];
         }
     };

     @Override
     public int describeContents() {
         return 0;
     }


     @Override
     public void writeToParcel(Parcel parcel, int i) {
         parcel.writeString(name);
         parcel.writeInt(time);
     }

     private Workout(Parcel in){
         this.name = in.readString();
         this.time = in.readInt();
     }
}

Вот код из второе действие

this.btnSaveRoutine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(edRoutineName.getText().toString().isEmpty()){
                edRoutineName.setError("Routine name empty");
            } else {
                intent = new Intent();

                intent.putExtra("routineName",edRoutineName.getText().toString());
                intent.putParcelableArrayListExtra("workouts", workouts);
                setResult(Activity.RESULT_OK, intent);
                finish();
            }
        }
    });

И код из основного действия

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode == Activity.RESULT_OK){
        //save routine to db and display on recyclerview

        String routineName =  data.getStringExtra("routineName");
        workouts = data.getExtras().getParcelableArrayList("workouts");
        Toast.makeText(getApplicationContext(), "Name is " + routineName, Toast.LENGTH_LONG ).show();

        routines.add(new Routine(routineName, workouts));
        this.mRoutineAdapter = new RoutineAdapter(routines);
        this.rvRoutines.setAdapter(this.mRoutineAdapter);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...