使用Parcelable发送对象的Arraylist

时间:2020-05-25 22:58:35

标签: java android arraylist parcelable

尝试使用Parcelable在2个活动之间发送对象的Arraylist。当我尝试从接收活动中读取数据时,出现空对象引用错误。我已经阅读了许多教程和其他堆栈溢出线程,但似乎找不到我犯错的地方。任何帮助将不胜感激。

这是我的对象

代码
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);
    }
}

0 个答案:

没有答案
相关问题