3

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

我目前正计划让服务在每次完成数据查询时向 Activity 的处理程序发送一条消息。我希望发送给处理程序的消息包含 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) 我应该使用不同的模型来让我的服务更新我的活动中可能可见或不可见的数据吗?我总是希望我的活动中的数据是来自服务的最新数据。

4

3 回答 3

1

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

您可以简单地创建一个静态字段

public static ArrayList<MyObject> myObjects = .. 

并通过其他地方使用它MyRefActivity.myObjects

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

干杯。

于 2015-02-02T15:03:03.477 回答
0

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

如果活动正在运行,则禁止来自服务的通知

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

于 2010-09-17T20:44:08.643 回答
0

如果演员表是问题,就让它保持原样,不要演员表,错误就会消失。

于 2013-09-08T00:42:40.447 回答