如何在Bundle中发送自定义对象的ArrayList

时间:2010-09-16 20:50:50

标签: android android-activity arraylist android-service parcelable

我有一个应用程序,它使用服务每隔x秒创建一个自定义对象(MyObject)的ArrayList。然后我想让我的Activity获取这个ArrayList。

我目前正计划让服务每次完成对数据的查询时都向Activity的处理程序发送消息。我希望Handler的消息包含MyObjects的ArrayList。

在Activity中构建方法以从消息中获取此ArrayList时,我注意到我不能。

如果我试过

msg.getData().getParcelableArrayList("myObjects")

然后我将它传递给预期的方法,ArrayList不会接受它。如果我尝试投射结果:

(ArrayList<MyObject>)msg.getData().getParcelableArrayList("myObjects")

我收到错误:Cannot cast from ArrayList<Parcelable> to ArrayList<MyObject>

MyObject实现了Parcelable,我已经成功地将一个ArrayList从我的服务发送到我的活动,方法是让我的活动调用服务上的方法来检索它。不过,我正试图让我的活动轮询我的服务来获取这些数据。

1)如何将消息包中的ArrayList发送到处理程序?

2)我应该使用不同的模型让我的服务更新我的活动中可能会显示或未显示的数据吗?我一直希望我的活动中的数据是服务中的最新数据。

3 个答案:

答案 0 :(得分:1)

我有完全相同的问题,虽然仍在讨论Parcelable,但我发现静态变量对于任务来说并不是一个坏主意。

您只需创建一个静态字段

即可
public static ArrayList<MyObject> myObjects = .. 

并通过MyRefActivity.myObjects

从其他地方使用它

我不确定公共静态变量在具有活动的应用程序的上下文中意味着什么。如果您对此方法或此方法的性能方面也有疑问,请参阅:

干杯。

答案 1 :(得分:0)

应该使用另一种模型。我问的另一个问题提供了答案:

Suppress notifications from a service if activity is running

对于#1,您可以通过从ArrayList声明中删除泛型并在需要时根据需要进行转换来解决它。我知道这是有效的,因为这是我在重构之前根据其他问题做的。

答案 2 :(得分:0)

如果演员阵容是问题所在,请保持原状,不要施放,错误将消失。