2014-04-19 14 views
3

我想将对象传递给另一个活动。我的对象不可parcelable或serializeable,因为它包含的属性是本身不可parcel或序列化的对象。并且这些属性的属性不可以parcel或序列化。而这些属性的属性等等......都是不可分列或可序列化的。Android - 当对象不可序列化或可调解时将对象传递给活动

我没有授权将这些子对象的代码修改为属性。因此,我没有权限让它们实现可序列化或可分段。

我可以考虑将对象传递给其他活动的其他选项是什么?

+0

保存sharedpreferences中对象的数据记忆体在另一个活动中访问它们 – sandy

+0

您可以将它们放入数据库并通过传入主键在其他活动中获取它们吗? –

回答

1

传递您的Activity一个关键字符串,它可以用来从单个类中检索对象,例如扩展Application类。 Activity会在配置更改(例如旋转)后再次从那里检索对象。不要忘记确保Activity妥善处理返回对象为null的情况,在所有数据被终止后应用程序恢复的情况下。

0

虽然这是一个丑陋的解决方案,但可以将它们序列化为JSON。如果您有公共访问这些对象。使用例如Gson做这样的事情,然后传递一个JSON字符串作为Intent extra。另一种解决方案是将它们保存在Application对象中。 (更丑陋)

如果对象无法序列化(例如,持有持久TCP连接的对象),则需要将其存储在某个单例对象或任何其他可从Application透视图中引用的对象中。

0

除了Trevors的答案,我想给更多的细节。

有两种推荐的方法可以做到这一点。看看这个question的详细讨论。

  • 在切换活动时使用Singelton类来保存数据。将数据从调用者写入它并由被调用者读取。

  • 扩展Application类,它是保存应用程序全局状态的基类。

总的想法是将数据保存到一个独立于Activity生命周期且可以全局访问的地方。

这里是一个blog post如何使用这些方法。