如何安全地访问异步提取的内容?

时间:2012-09-06 21:32:30

标签: android android-asynctask

以下是我要做的事情: 当我的应用程序启动时,它会直接启动异步调用以从WebService获取一些数据。 然后,我打开第二个显示该数据的Activity。 简化代码: 活动1:

OnPostExecute()
{               
for (int i = 0; i < jsonArray.length(); ++i)
    { JSONObject jsonTrack = jsonTrackArray.getJSONObject(i);
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                Content content = new Content(jsonObject.getString("content"),
                MyApp.contentList.add(Content);
         }
}

第二项活动:

doSomething (contentList.get(0));

当我尝试访问contentList(0)时,我如何确保它已被AsynTask提取?

2 个答案:

答案 0 :(得分:0)

您可能希望在操作完成之前将用户留在第一个活动中,或者将此逻辑移至服务并在完成时进行广播,并设置一些标志,第二个活动可以检查其生命周期创建方法。

scenario 1:
activity1 starts service then launches activity2.
Service completes, saves a preference, and broadcasts a success message.
activity2 receives this and does its thing.

scenario 2:
User comes back later to activity2, it's onResume checks a preference flag and knows the data exists, so it does its thing.

答案 1 :(得分:0)

在您启动请求时启动加载对话框,只有在收到响应或错误后才将其关闭。如果您需要跨活动存储状态共享,只需将其放在SharedPreference中,然后在那里进行检查。在操作完成之前,您很可能只是让用户保持相同的活动,但如果您想允许他们切换到下一个活动,您可以在意图(您添加到意图中的参数)中传递有关请求的信息开始下一个活动。因此,数据确实需要通过意图传递给第二个活动,或者存储在第二个活动可以访问它的中心位置。

注意到你将它放在Application类中。不建议。我会将它存储在其他地方,如SharedPreference或Database。

如果您想要非模态对话框,则可以使用进度窗口小部件。你可以把它放在你的清单btw的标题中。

另请注意startActivityForResult()选项。