0

我有一个 IntentService,它可以访问 Web 服务并从 Web 服务中获取数据。然后它将数据转换为对象列表。它将 List 存储在 DataStore 单例中,然后触发 Intent 返回主应用程序,告诉它数据已准备好。

稍后,主应用程序将从 DataStore 访问列表,并显示它。它还可以根据用户可以选择的某些类别过滤此列表。选择其中之一时,我的自定义listAdapter将浏览其拥有的列表的副本,并选择与用户选择的标签匹配的对象。我相信我是在 DataStore 提供的列表副本中这样做的,但我不再那么确定了。

这是我的问题:我选择了这些过滤器之一。然后我去刷新。这会导致 IntentService 调用 DataStore.getList(),这是触发 ConcurrentModificationException 的地方。

从意图服务实际返回列表的正确方法是什么?

4

1 回答 1

1

鉴于您提供的信息量,很难判断出什么问题。

当我编写一个从 Web 下载数据的应用程序时,我使用 IntentService 下载数据并将其存储在内容提供程序中。在主 Activity 中,我使用 CursorLoader 对内容提供程序运行查询,并在查询完成时显示数据。为了“触发”刷新,我在下载完成时执行以下操作:

  1. 发布包含 Intent 的通知,将用户带回显示数据的 Activity。这涵盖了Activity在后台的情况;用户可以在方便时返回 Activity 查看更新的数据。
  2. 使用 LocalBroadcastManager() 向 Activity 发布广播 Intent。这涵盖了 Activity 处于前台的情况;传入的广播意图可以强制对内容提供者进行新的查询。
于 2013-10-03T20:46:09.880 回答