2017-07-30 82 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

相关问题