我試圖通過在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)
這工作正常。但我有疑問。當我嘗試序列化一個自定義對象並將其作爲一個廣播發送時,即使外部類沒有實現可序列化,它也可以很好地工作。爲什麼在將它發送到另一個不可序列化的活動時呢?另外請注意,當我發送對象作爲我從服務發送的廣播。即使從服務startActivity(intent)doent序列化 – Venkatesh
@Venkatesh你怎麼發送它在廣播?你使用相同的方法'putSerializable()'? – Yazan
這也可能與'活動'有關,因爲MainActivity擴展了它,但在另外一種情況下,你的外部類是什麼擴展的(如果它擴展了什麼?)**我不確定**只是猜測:) – Yazan