1

これが私がやろうとしていることです: アプリケーションが起動すると、非同期呼び出しを直接開始して WebService からデータを取得します。次に、そのデータを表示する 2 つ目のアクティビティを開きます。簡略化されたコード: アクティビティ 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);
         }
}

2 番目のアクティビティ:

doSomething (contentList.get(0));

contentList(0) にアクセスしようとしたときに、 AsynTask によって既にフェッチされていることを確認するにはどうすればよいですか?

4

2 に答える 2

0

リクエストを開始した瞬間に読み込みダイアログを開始し、応答またはエラーが発生した場合にのみオフにします。アクティビティ間で共有可能なステータスを保存する必要がある場合は、それを SharedPreference に配置し、そこでチェックします。ほとんどの場合、操作が完了するまでユーザーを同じアクティビティにとどめますが、ユーザーが次のアクティビティに切り替えられるようにする場合は、使用するインテント (インテントに追加するパラメーター) でリクエストに関する情報を渡すことができます。次の活動を開始します。したがって、データは意図を介して 2 番目のアクティビティに渡すか、2 番目のアクティビティがアクセスできる中央の場所に保存する必要があります。

Application クラスに入れていることに気付きました。推奨されません。SharedPreference や Database などの別の場所に保存します。

非モーダル ダイアログが必要な場合は、代わりに進行状況ウィジェットを使用できます。ところで、これをリストのヘッダーに入れることができます。

また、startActivityForResult() オプションにも注意してください。

于 2012-09-06T22:04:39.030 に答える
0

操作が完了するまで最初のアクティビティでユーザーを残すか、このロジックをサービスに移動して完了時にブロードキャストし、2 番目のアクティビティがそのライフサイクル作成メソッドをチェックできるフラグを設定することをお勧めします。

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 に答える