如何将不可解析和不可序列化的对象插入 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,您可以使用 Serializableparcelable

您可以使用另一种方式来使用数据交换格式,例如 JSONXML 或任何其他 .但这样一来,为 marshal 和 unmarshal 编写的内容会更多。所以你最好使用Bundle.putParcelable/Bundle.getParcelableBundle.putSerializable/Bundle.getSerializable

这还取决于您传递 Object 的确切位置。你应该看看Be Careful Where You Use Custom Parcelables。 Scholar Commansware 的博客之一。

如果您需要在前台应用程序时在组件之间传递对象,那么Parcelables 是最好的方法。

【讨论】:

能否进一步详细说明“元帅”?【参考方案2】:

你不能。您所能做的就是从中获取信息,创建您自己的 Parcelable 或 Serializable 对象,然后发送。

【讨论】:

以上是关于如何将不可解析和不可序列化的对象插入 Bundle的主要内容,如果未能解决你的问题,请参考以下文章

如何解析不可预测的 JSON 对象?

怎样对带有不可序列化属性的Java对象进行序列化

可序列化和不可序列化对象保存到数据库之间的区别

如何使 Python 中的 json.dumps 忽略不可序列化的字段

将 ConnectionResult 设置为可打包或可序列化的对象

Spark - 不可序列化的任务:如何使用调用外部类/对象的复杂地图闭包?