无法将对象转换为可包裹
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
接口。
你的意思是,因为我有 listTrends
类应该实现Parcelable
接口。之后,您可以使用putParcelableArrayList()
将数组保存在包中。无需键入强制转换它。可以查看官方Android Documentation 看看如何实现。【参考方案3】:
如果你需要传递一个 ArrayList,那么我会去实现 Parcelable
【讨论】:
以上是关于无法将对象转换为可包裹的主要内容,如果未能解决你的问题,请参考以下文章
将带有列表的休眠 POJO 转换为可序列化的 rpc 返回对象
将带有列表的hibernate POJO转换为可序列化的rpc返回对象