【问题标题】: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

【问题讨论】:

    标签: android android-intent broadcastreceiver classcastexception parcelable


    【解决方案1】:

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

    欲了解更多信息read this

    【讨论】:

      【解决方案2】:

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

      【讨论】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-23
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-24
        相关资源
        最近更新 更多