У меня есть это исключение в моем проекте во Fragment.java, и я не знаю, в чем проблема, потому что я уже реализовал Parcelable для класса MyClass и не должен быть проблемой с ним.
Я что-то упустил?
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)
Вызывается java.io.NotSerializableException mypackage.model.MyClass
и вот код MyClass
:
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
}
}
Я удалил основную часть методов, чтобы сделать ее более короткой для обзора. Я передаю этот объект с намерением между своими действиями, и мой код работает на многих телефонах, но это исключение возникает только в некоторых телефонах, а не на всех.