【问题标题】:How to send an ArrayList of custom objects in a Bundle如何在 Bundle 中发送自定义对象的 ArrayList
【发布时间】:2010-09-16 20:50:50
【问题描述】:

我有一个应用程序,它使用服务每隔 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&lt;Parcelable&gt; to ArrayList&lt;MyObject&gt;

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

1) 如何在消息中将捆绑包内的 ArrayList 发送给处理程序?

2) 我应该使用不同的模型来让我的服务更新我的 Activity 中可能可见或不可见的数据吗?我始终希望我的活动中的数据是服务中的最新数据。

【问题讨论】:

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


    【解决方案1】:

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

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

    public static ArrayList<MyObject> myObjects = .. 
    

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

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

    干杯。

    【讨论】:

      【解决方案2】:

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

      Suppress notifications from a service if activity is running

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

      【讨论】:

        【解决方案3】:

        如果演员表是问题,就让它发生,不要演员表,错误就会消失。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 2015-06-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多