如何将不可分割和不可序列化的对象插入 Bundle

How to insert non-parceable and non-serializable object into Bundle

我正在为 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
        }

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

你不能这样做,它也在文档中提到。对象在传递之前应该是 Marshal,因为你可以使用 Serializableparcelable.

另一种方法是使用数据交换格式,例如 JSONXML 或任何其他 .但是这种方式将更多地为编组和解编组编写。所以你最好使用 Bundle.putParcelable/Bundle.getParcelableBundle.putSerializable/Bundle.getSerializable .

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

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