2017-02-28 10 views
0

基本的にオブジェクトをシリアル化としてバンドルに保存してから、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 

答えて

1

あなたの問題の主な原因はこれです。 AdViewControllerでシリアライズ可能なインターフェイスも実装されていることを確認してください

0

bundle.putSerializable( "value"、myObj)を使用する前に、MyObjにSerializableインターフェイスが実装されていることを確認してください。

public class MyObj implements Serializable{ 
    ...... 
} 
関連する問題