如何将不可解析和不可序列化的对象插入 Bundle
Posted
技术标签:
【中文标题】如何将不可解析和不可序列化的对象插入 Bundle【英文标题】:How to insert non-parceable and non-serializable object into Bundle 【发布时间】:2018-12-21 01:34:06 【问题描述】:我正在使用适用于 android 的 twitter API。 通过调用,将返回一个“Tweet”对象列表。我想在需要时将此列表保存到我的 savedInstanceBundle 中,这样我就不必再次进行大型 http 调用。问题是“Tweet”没有实现 parceable 或 serializable,所以我无法将它输入到包中。
我有什么选择?
Call<List<Tweet>> lookup = apiclient.getStatusesService().lookup(ids, true, false, false);
lookup.enqueue(new Callback<List<Tweet>>()
@Override
public void success(Result<List<Tweet>> result)
Response response = result.response;
List<Tweet> tweets = result.data; //what I'd like to save
【问题讨论】:
发布您获取 Tweet 对象的代码?如何在没有 Tweet 类的情况下保存这些对象? API 返回给定一堆 Twitter 帖子 ID 的“调用”项目列表。然后,您可以为每个“呼叫”发出 http 请求。在回调中给出的调用结果是一个“Tweet”对象列表 【参考方案1】:您也不能这样做,文档中也提到了。在传递之前,对象应该是 Marshal,您可以使用 Serializable
或 parcelable
。
您可以使用另一种方式来使用数据交换格式,例如 JSON
或 XML
或任何其他 .但这样一来,为 marshal 和 unmarshal 编写的内容会更多。所以你最好使用Bundle.putParcelable/Bundle.getParcelable
或Bundle.putSerializable/Bundle.getSerializable
。
这还取决于您传递 Object 的确切位置。你应该看看Be Careful Where You Use Custom Parcelables。 Scholar Commansware 的博客之一。
如果您需要在前台应用程序时在组件之间传递对象,那么Parcelables
是最好的方法。
【讨论】:
能否进一步详细说明“元帅”?【参考方案2】:你不能。您所能做的就是从中获取信息,创建您自己的 Parcelable 或 Serializable 对象,然后发送。
【讨论】:
以上是关于如何将不可解析和不可序列化的对象插入 Bundle的主要内容,如果未能解决你的问题,请参考以下文章
如何使 Python 中的 json.dumps 忽略不可序列化的字段