基本的にオブジェクトをシリアル化としてバンドルに保存してから、putExtras()
経由でインテントにバンドルを保存します。私は、同じ活動にバンドルからシリアライズを取得する場合、私はそう首尾よく行うことができる午前:インテントで新しいアクティビティを開始するとシリアル化可能例外がスローされる
Bundle bundle = new Bundle();
bundle.putSerializable("value", myObj);
i.putExtras(bundle);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MyObj temp = (MyObj) bundle.getSerializable("value");
}
}, 3000);
しかし、私はstartActivity()
を呼び出すときに、第2のアクティビティに移動し、そのライン上のアプリのクラッシュ:
02-28 10:07:29.576 14929-14929/com.mopub.simpleadsdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mopub.simpleadsdemo, PID: 14929
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.mopub.mobileads.MoPubView)
at android.os.Parcel.writeSerializable(Parcel.java:1527)
at android.os.Parcel.writeValue(Parcel.java:1475)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:724)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1157)
at android.os.Parcel.writeBundle(Parcel.java:764)
at android.content.Intent.writeToParcel(Intent.java:8687)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4228)
at android.app.Activity.startActivityForResult(Activity.java:4186)
at android.app.Activity.startActivity(Activity.java:4525)
at android.app.Activity.startActivity(Activity.java:4493)
at com.mopub.simpleadsdemo.BannerActivity$2.run(BannerActivity.java:81)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.io.NotSerializableException: com.mopub.mobileads.AdViewController$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at android.os.Parcel.writeSerializable(Parcel.java:1522)
at android.os.Parcel.writeValue(Parcel.java:1475)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:724)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
at android.os.Bundle.writeToParcel(Bundle.java:1157)
at android.os.Parcel.writeBundle(Parcel.java:764)
at android.content.Intent.writeToParcel(Intent.java:8687)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4228)
at android.app.Activity.startActivityForResult(Activity.java:4186)
at android.app.Activity.startActivity(Activity.java:4525)
at android.app.Activity.startActivity(Activity.java:4493)
at com.mopub.simpleadsdemo.BannerActivity$2.run(BannerActivity.java:81)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
どうしてですか? 2番目のアクティビティでオブジェクトを取得したいと思います。私はこのサードパーティのライブラリ(AdViewController
クラス)のソースコードにアクセスし、それをimplements Serializable
にしました。 instanceof Serializable
を確認すると、myObj
がシリアル化されていることがわかります。あなたのクラスが直列化可能でないことを意味し
Caused by: java.io.NotSerializableException: com.mopub.mobileads.AdViewController
: