2017-07-30 3 views
0

CustomObjectにSerializableを実装することで、この単純なオブジェクトをMainActivityからMain2Activityに渡そうとしました。エラーになります。私は同様のスタックオーバーフローの質問を参照しました。何も助けなかった。カスタムオブジェクトをインテントを通してアクティビティ間で渡す際にエラーが発生しました

public class MainActivity extends Activity { 
    String TAG = "MainActivity"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Intent i = new Intent(this,Main2Activity.class); 
    Bundle bundle = new Bundle(); 
    bundle.putSerializable("data",new CustomObject()); 
//I tried i.putExtra(bundle); 
    i.putExtra("data",new CustomObject()); 
    startActivity(i); 
    Log.d(TAG, "onCreate: "); 
} 

public class CustomObject implements Serializable{ 
    public int i = 0; 
    public int j = 9; 
    CustomObject(){ 

    } 
} 
} 

Main2Activity

public class Main2Activity extends Activity { 
String TAG = "Main2Activity"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Intent i = getIntent(); 
    MainActivity.CustomObject c = (MainActivity.CustomObject)i.getSerializableExtra("data"); 
    Log.d(TAG, "onCreate: "+c.i+" "+c.j); 
} 
} 

エラーメッセージ:

7月30日13:58:58.352 26489から26489 /? E/AndroidRuntime:致命的な例外: メインプロセス:gct.venkatesh.com.scrshtrebuilt、PID:26489 java.lang.RuntimeException:活性 ComponentInfo {gct.venkatesh.com.scrshtrebuilt/gct.venkatesh.comを開始できません.scrshtrebuilt.MainActivity}: java.lang.RuntimeException:Parcelableはandroid.app.ActivityThread.performLaunchActivity(ActivityThread.javaで 直列化可能なオブジェクトを書いIOExceptionが発生した(名前= gct.venkatesh.com.scrshtrebuilt.MainActivity $ CustomObject) 2684) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) android.app.ActivityThread.-wrap12(ActivityThread.java)android.os.Looper.loop(Looper.java:154)の にあるアンドロイド.app.ActivityThread $ H.handleMessage(ActivityThread.java:1496) のは、アンドロイド.os.Handler.dispatchMessage(Handler.java:102) android.app.ActivityThread.main(ActivityThread.java:6186)の のjava.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 原因:java.lang.RuntimeException:Parcelable IOExceptionが発生しました。 シリアライズ可能オブジェクト(名前= gct.venkatesh.com。 scrshtrebuilt.MainActivity $ CustomObject) android.os.Parcel.writeSerializable(Parcel.java:1527) (android.os.Parcel.writeValue(Parcel.java:1475) )android.os.Parcel.writeArrayMapInternal(Parcel.java:724)にあります。 android.os.Parcel.writeBundle(Parcel.java:764)でandroid.os.BaseBundle.writeToParcelInner android.os.Bundle.writeToParcelで(BaseBundle.java:1417) (Bundle.java:1157) で) android.content.Intent.writeToParcel(Intent.java:8703) android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) android.app.Instrumentation.execStartActivity(Instrumentation.java:1520) at android.app.Activity.startActivityForResult(Activity.java:4229) とandroid.app.Activity.startActivityForResult(Activity.java:4187) at android.app.Activity.startActivity(Activity.java:4526) at android.app.Activity.startActivity(Activity.java:4494) gct.venkatesh.com.scrshtrebuilt.MainActivity.onCreate(MainActivity.java:21) android.app.Activity.performCreate(Activity.java:6684) android.app.ActivityThreadの とandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) (android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2637) )にあります。(%1)%1!%2!%2!%2!%2!%2!%2!%2!%2!%2!%2%%2! (Handler.java:102) とandroid.os.Looper.loop(Looper.java:154) とandroid.app.ActivityThread.main(ActivityThread.java:6186) at java.lang.reflect.Method.invoke (ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 原因: java.io.NotSerializableException :java.io.ObjectOutputStreamのでjava.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)でjava.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224) でgct.venkatesh.com.scrshtrebuilt.MainActivity .writeSerialData(ObjectOutputStream.java:1549) のjava.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472) のjava.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218) のjava.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:346) android.os.Parcel.writeSerializable(Parcel.java:1522) android.os.Parcel.writeValue(Parcel.java:1475) android.os.Bundle.writeToParcelでandroid.os.BaseBundle.writeToParcelInner(BaseBundle.java:1417) でandroid.os.Parcel.writeArrayMapInternal(Parcel.java:724) (Bundle.java:1157) ででandroid.os.Parcel.writeBundle(Parcel.java:764) at android.content.Intent.writeToParcel(Intent.java:8703) (android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) )でアンドロイド。 app.Instrumentation.execStartActivity(Instrumentation.java:1520) とandroid.app.Activity.startActivityForResult(Activity.java:4229) (android.app.Activity.startActivityForResult(Activity.java:4187))にあります。 (Activity.java:4494) (android.app.Activity.startActivity(Activity.java:4526) android.app.Activity.startActivity(Activity.java:4494) (gct.venkatesh.com.scrshtrebuilt.MainActivity.onCreate(MainActivity.java: 21)android.app.ActivityThread.performLaunchActivityでandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) でandroid.app.Activity.performCreate(Activity.java:6684) で(ActivityThread.java:2637) android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) android.app.ActivityThread.-wrap12(ActivityThread.java) android.app.ActivityThread $ HHandleMessage(ActivityThread.java:1496) android.os.Handler.dispatchMessage(Handler.java:102) (android.os.Looper.loop(Looper.java:154) android.app.ActivityThread)にあります。 main(ActivityThread.java:6186) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android .internal.os.ZygoteInit.main(ZygoteInit。ジャワ:ログにこのエラーによって779)

答えて

0

java.io.NotSerializableException: gct.venkatesh.com.scrshtrebuilt.MainActivity at 

MainActivityシリアライズないが、私は

、プラットフォームはCustomObjectMainActivityでインナークラスであるためMainActivityが直列になりたいと思います別のローカルクラス(別ファイル)にCustomObjectを定義してみてください

+0

それはうまく動作します。しかし、私は疑いがあります。カスタムオブジェクトをシリアル化してブロードキャストとして送信しようとすると、外部クラスがシリアル化可能を実装していなくてもうまく動作します。なぜそれは別のアクティビティに送るのか、それはシリアライズ可能ではありません。また、ブロードキャストとしてオブジェクトを送信すると、サービスから送信されることにも注意してください。サービス開始から(意図)doentは、 – Venkatesh

+0

@Venkateshをシリアル化します。あなたはどのようにブロードキャストでそれを送信しますか?同じメソッド 'putSerializable()'を使用しますか? – Yazan

+0

MainActivityはそれを拡張しているので、これは 'Activity'に関連する可能性がありますが、他のケースでは、あなたの外部クラスは何を拡張しますか?**私は確信していません**ちょっと推測します:) – Yazan

関連する問題