我如何可以通过自定义对象从一个活动到另一个使用putExtra() [英] How can I pass a custom object from one activity to another using putExtra()

查看:138
本文介绍了我如何可以通过自定义对象从一个活动到另一个使用putExtra()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在试图传递对象的阵列从一个活动到另一个。我一直在寻找周围,似乎你的对象必须实现 Parcelable 序列化。 (这并没有多大意义,我。我不知道为什么你可以将对象数组传递到 putExtra())。我不是想传递一个特定的整数或字符串,但数组可以说人的对象。但我一直有麻烦。我想传递的对象数组是包含位图和一些字符串对象的数组。我试图让我的目标同时实现Parcelable和序列化,但我不断收到错误信息。这是当我实现Serializable我得到一个错误。任何人有什么建议吗?

  03-26 20:35:53.886:E / AndroidRuntime(30066):致命异常:主要
03-26 20:35:53.886:E / AndroidRuntime(30066):工艺:com.example.test,PID:30066
03-26 20:35:53.886:E / AndroidRuntime(30066):java.lang.RuntimeException的:Parcelable遇到IOException异常写序列化对象(名称= com.example.test.Person)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.os.Parcel.writeSerializable(Parcel.java:1316)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.os.Parcel.writeValue(Parcel.java:1264)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.os.Bundle.writeToParcel(Bundle.java:1692)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.os.Parcel.writeBundle(Parcel.java:636)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.content.Intent.writeToParcel(Intent.java:7414)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2289)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.app.Instrumentation.execStartActivity(Instrumentation.java:1437)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.app.Activity.startActivityForResult(Activity.java:3511)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.app.Activity.startActivityForResult(Activity.java:3472)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.app.Activity.startActivity(Activity.java:3714)
03-26 20:35:53.886:E / AndroidRuntime(30066):在android.app.Activity.startActivity(Activity.java:3682)
03-26 20:35:53.886:E / AndroidRuntime(30066):在com.example.test.MainActivity $ 1.onItemClick(MainActivity.java:54)
 

解决方案

我也是对象转移的受害者,并通过序列化,parcelable和使用GSON历程。最后,我succeded使用Eventbus。 为了将两个活动之间的自定义对象EventBus可能是有用的。 要设置EventBus简单地从的这里,并引用它在你的Andr​​oid项目。

在你SourceActivity

意向意图=新的意图(这一点,Destination.class);  。de​​.greenrobot.event.EventBus.getDefault()postSticky(your_Object_to_send);  startActivity(意向);

在你DestinationActivity

对象myObject的=(对象)EventBus.getDefault()。removeStickyEvent(Object.class)

请注意,没有必要的复杂的东西。 在效率比较完成此由史蒂芬

I have been trying to pass an array of objects from one activity to another. I have been searching around and it seems that your object must implement either Parcelable or Serializable. (Which doesn't make much sense to me. I dont know why you can just pass the object array into the putExtra()). I am not trying to pass in a specific int or String but an array of lets say people objects. But I have been having trouble. The object array that I want to pass in is an array of objects that contain a bitmap and a few strings. I have tried to have my object implement both Parcelable and Serializable but I keep on getting errors. This is an error I get when I implement Serializable. Anyone have any tips?

03-26 20:35:53.886: E/AndroidRuntime(30066): FATAL EXCEPTION: main
03-26 20:35:53.886: E/AndroidRuntime(30066): Process: com.example.test, PID:    30066
03-26 20:35:53.886: E/AndroidRuntime(30066): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.test.Person)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.os.Parcel.writeSerializable(Parcel.java:1316)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.os.Parcel.writeValue(Parcel.java:1264)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.os.Bundle.writeToParcel(Bundle.java:1692)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.os.Parcel.writeBundle(Parcel.java:636)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.content.Intent.writeToParcel(Intent.java:7414)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2289)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1437)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.app.Activity.startActivityForResult(Activity.java:3511)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.app.Activity.startActivityForResult(Activity.java:3472)  
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.app.Activity.startActivity(Activity.java:3714)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at android.app.Activity.startActivity(Activity.java:3682)
03-26 20:35:53.886: E/AndroidRuntime(30066):    at    com.example.test.MainActivity$1.onItemClick(MainActivity.java:54)

解决方案

I am also a victim of transfer of object and gone through serializable, parcelable and use of Gson. Finally I succeded by using Eventbus. To transfer a custom object between two activities "EventBus" can be useful. To setup EventBus simply download the .jar from here and reference it in your Android Project.

In your SourceActivity

Intent intent = new Intent(this,Destination.class); de.greenrobot.event.EventBus.getDefault().postSticky(your_Object_to_send); startActivity(Intent);

In your DestinationActivity

Object myObject = (Object)EventBus.getDefault().removeStickyEvent(Object.class)

Notice that there is no need of complex stuff. The Efficiency Comparison is done here by steven

这篇关于我如何可以通过自定义对象从一个活动到另一个使用putExtra()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆