将parcelable对象发送到另一个活动时出错

时间:2013-09-03 12:22:56

标签: android parsing parcelable badparcelableexception

我有一个类classOne,它扩展了parceble。我正在使用classOne类来解析json让我们说feed feed json 这是我的代码

public class classOne implements Parcelable{
    public String createdAt         = null;
    public String description       = null;
    public String ownerName          = null;
   public ArrayList<classOne> repliesArrayList = null;

public classOne(JSONObject jObject){ 
createdAt = jObject.isNull("created_at") == true ? "" :jObject.optString("created_at");
description = jObject.isNull("description") == true ? "":      jObject.optString("description");
ownerName = jObject.isNull("name") == true ? "" : jObject.optString("name");

if (!jobject.isNull("messages")) {
     repliesArrayList = new ArrayList<classOne>();
      JSONArray repliesJsonArray = jobject.optJSONArray("messages");
      int count = repliesJsonArray.length() - 1;

   for (int repliesCount = count; repliesCount >= 0; repliesCount--) {
    classOne repliesMessageModel = new     classOne(repliesJsonArray.optJSONObject(repliesCount));
      repliesArrayList.add(repliesMessageModel);
     }
  }
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
  dest.writeString(createdAt);
  dest.writeString(description);    
      dest.writeString(ownerName);
      dest.writeTypedList(repliesArrayList);    
     }

    private void readFromParcel(Parcel in) {  
        createdAt = in.readString();
        description = in.readString();
    ownerName = in.readString();
    in.readTypedList(repliesArrayList, classOne.CREATOR);
    }


public static final Parcelable.Creator<classOne> CREATOR = new Parcelable.Creator() { 
        public MessageDataModel createFromParcel(Parcel in) { 
            return new classOne(in); 
        }   
        public MessageDataModel[] newArray(int size) { 
            return new classOne[size]; } 
    }; 

}

它正常工作但我在尝试将repliesArrayList从一个活动发送到其他活动时收到错误

这是我的代码,用于将数组列表从一个类发送到其他类

  Intent intent7 = new Intent(getApplicationContext(), ParceActivity.class);
  intent7.putParcelableArrayListExtra("msg", replyList); 
  startActivity(intent7);

公共类ParceActivity扩展了Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);     
 System.out.println("----------msg|" +getIntent().getParcelableArrayListExtra("msg").size());
  }

}

我收到了以下错误。

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
     E/AndroidRuntime( 8432):   at         android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime( 8432):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime( 8432):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime( 8432):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8432):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 8432):    at android.app.ActivityThread.main(ActivityThread.java:5041)
E/AndroidRuntime( 8432):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8432):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 8432):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime( 8432):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime( 8432):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 8432): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 8432):    at android.os.Parcel.readListInternal(Parcel.java:2237)
E/AndroidRuntime( 8432):    at android.os.Parcel.readList(Parcel.java:1531)

如果我发送任何其他数据,它的工作正常,但如果我发送replayList,则会给我一个错误。我不知道我已经调试了这个代码出了什么问题,在将重播列表从活动1发送到其他活动时,值就在那里。这是因为重放列表具有相同的数据类型“classOne”???

1 个答案:

答案 0 :(得分:-1)

从readToParcel和writeToParcel中删除repliesArrayList。