1

这是我想要做的事情:当我的应用程序启动时,它直接启动异步调用以从 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 获取?

4

2 回答 2

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.
于 2012-09-06T22:01:30.207 回答
0

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

刚刚注意到您将它放在 Application 类中。不建议。我会将它存储在其他地方,例如 SharedPreference 或数据库。

如果您想要非模态对话框,您可以使用进度小部件。顺便说一句,您可以将其放在列表的标题中。

另外请注意 startActivityForResult() 选项。

于 2012-09-06T22:04:39.030 回答