2017-07-30 81 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); 
} 
} 

錯誤消息:

07-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遇到IOException異常寫 序列化對象(名稱= gct.venkatesh.com.scrshtrebuilt.MainActivity $ CustomObject) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2684) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ hhandleMessage(ActivityThread.java:1496) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6186) at java.lang.reflect.Method.invoke(Native Method) 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) at android.os.Parcel.writeSerializable(Parcel.java:1527) at android.os.Parcel.writeValue(Parcel.java:1475) at android.os.Parcel.writeArrayMapInternal(Parcel.java:724 ) 在android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1417) 在android.os.Bundle.writeToParcel(Bundle.java:1157) 在android.os.Parcel.writeBundle(Parcel.java:764) 在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) at android.app.Activity.startActivityForResult(Activity.java:4187) at android.app.Activity.startActivity(Activity.java:4526) at android.app.Activity.performCreate(Activity.java:6684)android.app.Activity.startActivity(Activity.java:4494) at gct.venkatesh.com.scrshtrebuilt.MainActivity.onCreate(MainActivity.java:21) at android.app.Activity.performCreate(Activity.java:6684) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2637) at android.app.ActivityThread。在android.app.ActivityThread上的handleLaunchActivity(ActivityThread.java:2751) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1496) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop(Looper.java:154) at 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 : gct.venkatesh.com.scrshtrebuilt.MainActivity 在java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224) 在java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584) 在java.io.ObjectOutputStream中.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) at android.os.Parcel.writeSerializable(Parcel.java:1522) at android.os.Parcel.writeValue(Parcel.java:1475) 在android.os.Parcel.writeArrayMapInternal(Parcel.java:724) 在android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1417) 在android.os.Bundle.writeToParcel(Bundle.java:1157) 在android.os.Parcel.writeBundle(Parcel.java:764) 在android.content.Intent.writeToParcel(Intent.java:8703) 在android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) 在機器人。 app.Instrumentation.execStartActivity(Instrumentation.java:1520) at android.app.Activity.startActivityForResult(Activity.java:4229) at android.app.Activity.startActivityForResult(Activity.java:4187) at android.app.Activity.startActivity(Activity.java:4526) at android.app.Activity.startActivity(Activity.java:4494) at gct.venkatesh.com.scrshtrebuilt.MainActivity.onCreate(MainActivity.java: 21) at android.app.Activity.performCreate(Activity.java:6684) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2637) at android.app.ActivityThread.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.andle.Message(ActivityThread.java:1496) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread。在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889) com.android .internal.os.ZygoteInit.main(ZygoteInit。Java的:779)

回答

0

這個錯誤日誌:

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

MainActivity序列化,我覺得平臺想MainActivity可序列化,因爲CustomObjectMainActivity內部類,

嘗試在一個單獨的本地類(單獨文件)中定義您的CustomObject

+0

這工作正常。但我有疑問。當我嘗試序列化一個自定義對象並將其作爲一個廣播發送時,即使外部類沒有實現可序列化,它也可以很好地工作。爲什麼在將它發送到另一個不可序列化的活動時呢?另外請注意,當我發送對象作爲我從服務發送的廣播。即使從服務startActivity(intent)doent序列化 – Venkatesh

+0

@Venkatesh你怎麼發送它在廣播?你使用相同的方法'putSerializable()'? – Yazan

+0

這也可能與'活動'有關,因爲MainActivity擴展了它,但在另外一種情況下,你的外部類是什麼擴展的(如果它擴展了什麼?)**我不確定**只是猜測:) – Yazan

相關問題