I have this exception in my project in Fragment.java and I don't know what is the problem, because I've already implement Parcelable for MyClass class and should not be a problem with it. Am I missing something?
Fatal Exception: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = mypackage.a.a.a)
at android.os.Parcel.writeSerializable(Parcel.java:1447)
at android.os.Parcel.writeValue(Parcel.java:1395)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1337)
at android.os.Bundle.writeToParcel(Bundle.java:1079)
at android.os.Parcel.writeBundle(Parcel.java:690)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:148)
at android.os.Parcel.writeTypedArray(Parcel.java:1233)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:564)
at android.os.Parcel.writeParcelable(Parcel.java:1416)
at android.os.Parcel.writeValue(Parcel.java:1322)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1337)
at android.os.Bundle.writeToParcel(Bundle.java:1079)
at android.os.Parcel.writeBundle(Parcel.java:690)
at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:150)
at android.os.Parcel.writeTypedArray(Parcel.java:1233)
at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:564)
at android.os.Parcel.writeParcelable(Parcel.java:1416)
at android.os.Parcel.writeValue(Parcel.java:1322)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:665)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1337)
at android.os.Bundle.writeToParcel(Bundle.java:1079)
at android.os.Parcel.writeBundle(Parcel.java:690)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3153)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3455)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5621)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
Caused by java.io.NotSerializableException mypackage.model.MyClass
and here is MyClass
code:
public class MyClass implements Parcelable {
private transient JSONObject json;
public static final String KEY = "my_key";
public static final String VALUE = "my_value";
public MyClass(){
json = new JSONObject();
}
public MyClass(String json){
try {
if (!TextUtils.isEmpty(json)) {
json = new JSONObject(json);
}else {
json = new JSONObject();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public MyClass myMethod1(String s1, String s2){
//Do something here
}
public String myMethod2(String s1){
//Do something here
return null;
}
@Override
public String toString() {
return json.toString();
}
public String jsonText() {
return json.toString();
}
protected MyClass(Parcel in) {
try {
json = in.readByte() == 0x00 ? null : new JSONObject(in.readString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
if (json == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeString(json.toString());
}
}
public static final Parcelable.Creator<MyClass> CREATOR = new Parcelable.Creator<MyClass>() {
@Override
public MyClass createFromParcel(Parcel in) {
return new MyClass(in);
}
@Override
public MyClass[] newArray(int size) {
return new MyClass[size];
}
};
public static MyClass myMethod3(){
//Do something here
}
}
I have removed the body of methods for make it shorter to review. I'm passing this object with Intent between my activities and my code is working on many phones, but this exception only occurs in some phones, not all of them.