【问题标题】:Starting new activity with intent throws serializable exception有意图地开始新的活动会引发可序列化的异常
【发布时间】:2017-02-28 15:12:11
【问题描述】:

基本上,我将我的对象作为可序列化的对象保存在 Bundle 中,然后通过 putExtras() 将 Bundle 保存在 Intent 中。如果我在同一个 Activity 上从 Bundle 中获得 Serializable,我就能成功:

    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() 移动到第二个 Activity 时,应用程序在该行崩溃:

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) 

为什么会这样?我想在我的第二个活动中检索对象。我可以访问这个第三方库(AdViewController 类)的源代码,并已将其设为implements Serializable。检查instanceof Serializable 表明myObj 已被序列化。

【问题讨论】:

  • 你解决了这个问题吗?我在尝试序列化recyclerview时遇到这样的问题

标签: java android android-intent serialization


【解决方案1】:

您的问题的主要原因是:

Caused by: java.io.NotSerializableException: com.mopub.mobileads.AdViewController

这意味着你的类是不可序列化的。确保 AdViewController 也实现了可序列化接口

【讨论】:

    【解决方案2】:

    确保 MyObj 在你想使用之前已经实现了 Serializable 接口 bundle.putSerializable("value", myObj).

    public class MyObj implements  Serializable{
         ......
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      相关资源
      最近更新 更多