无法将对象转换为可包裹

Posted

技术标签:

【中文标题】无法将对象转换为可包裹【英文标题】:Can not cast an object to parcelable 【发布时间】:2019-01-31 22:17:28 【问题描述】:

我有一个Intent 服务。在onHandleIntent 中,我想将List<Trends> 类型的对象放入一个Intent,这样我就可以通过sendBroadcast 发送这个Intent,如下面的代码所示。

我现在面临的问题是,当我将列表对象放入 Bundle 并将其转换为 Parcelable 时,我收到以下发布的错误。

我的代码

Intent intentBroadcast = new Intent();
Bundle bundleList = new Bundle();
bundleList.putParcelable("data", (Parcelable) this.mTrendsList); //java.util.ArrayList cannot be cast to android.os.Parcelable
intentBroadcast.putExtra(TwitterTrendsAPIService.CONST_INTENT_KEY, bundleList);
sendBroadcast(intentBroadcast);

错误

java.lang.ClassCastException: java.util.ArrayList cannot be cast to android.os.Parcelable
at com.example.pc_amr.twittertrendsnearlocation.services.TwitterTrendsAPIService.onHandleIntent(TwitterTrendsAPIService.java:86)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:1

【问题讨论】:

【参考方案1】:

你只能放置实现Parcelable的类的对象。

欲了解更多信息read this。

【讨论】:

【参考方案2】:

putParcelable() 方法在这里用错了。此方法可用于保存实现Parcelable 接口的类的单个对象。保存数组需要使用putParcelableArrayList()方法。

【讨论】:

并确保您要保存其数组列表的类实现了Parcelable 接口。 你的意思是,因为我有 list 类 Trends 应该实现 Parcelable 是的,Trends 类应该实现Parcelable 接口。之后,您可以使用putParcelableArrayList() 将数组保存在包中。无需键入强制转换它。可以查看官方Android Documentation 看看如何实现。【参考方案3】:

如果你需要传递一个 ArrayList,那么我会去实现 Parcelable

【讨论】:

以上是关于无法将对象转换为可包裹的主要内容,如果未能解决你的问题,请参考以下文章

将整数转换为可迭代对象以方便代码重用

如何将字符串响应转换为可迭代对象

将带有列表的休眠 POJO 转换为可序列化的 rpc 返回对象

将带有列表的hibernate POJO转换为可序列化的rpc返回对象

Android:无法将@drawable/picture 转换为drawable

将 unicode 转换为可读字符串