0

(わかりやすくするために更新) 返された結果に基づいて、Android AsyncTask で HTTP 要求を再実行する必要がある場合があります。以下に、非同期タスクの簡単な例を貼り付けました。エラー コードを返す代わりに、サーバーがリクエストを処理していることを示す一時的な作業 ID を返すことになります。数秒ごとに確認し、サーバーが終了してデータが得られるまで、サーバーに working-id を送信する必要があります。それでおしまい!かなり単純に聞こえますが、私はそれを理解できないようです:

private class HttpGetter extends AsyncTask<URL, Void, Void> {

    @Override
    protected Void doInBackground(URL... urls) {
        // TODO Auto-generated method stub
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(urls[0]);

        try {
            HttpResponse response = client.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();

            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
                Log.v("Getter", "Your data: " + builder.toString()); // response
                                                                     // data
            } else {
                Log.e("Getter", "Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}

次に、AsyncTask を使用します。

HttpGetter get = new HttpGetter();
get.execute("http://www.google.es");
4

2 に答える 2

0

実際、あなたのコードはうまく動くかもしれませんが、改善できる箇所がまだいくつかあります。

  1. 終了する必要があります。数回ループした後、終了する必要があります。

  2. エラーハンドリング。一部の http 例外が発生した場合、実行を継続するか中断するか。

  3. 睡眠時間。各反復でスリープ時間を 2 倍にします。

PS: ここにもバグがあります。含めるのを忘れているだけかもしれません。

String status = jsonObject.getString("status").toString();

この行もループ内に配置する必要があります。

于 2013-09-04T03:15:49.397 に答える