0

ここに私のコードがあります:

private static JSONObject doGetRequest(String url) throws JSONException {
    System.out.println("doGetRequest > url : " + url);
    JSONObject json = null;
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    HttpResponse response;
    System.out.println("doGetRequest > httpGet " + httpGet);
    try {
        System.out.println("doGetRequest > before response ");
        response = httpClient.execute(httpGet);
        System.out.println("doGetRequest > response " + response);
        if(response.getStatusLine().getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                InputStream instream = entity.getContent();
                String result = convertStreamToString(instream);
                instream.close();

                json = new JSONObject(result);
            }
        } else {
            json = oDeskRestClient.genError(response.getStatusLine().getStatusCode(), response.getStatusLine().toString());
        }
    } catch (ClientProtocolException e) {
        json = oDeskRestClient.genError(HTTP_RESPONSE_503, "Exception: ClientProtocolException");
    } catch (IOException e) {
        json = oDeskRestClient.genError(HTTP_RESPONSE_503, "Exception: IOException");
    } catch (JSONException e) {
        json = oDeskRestClient.genError(HTTP_RESPONSE_503, "Exception: JSONException");  
    } catch (Exception e) {
        json = oDeskRestClient.genError(HTTP_RESPONSE_503, "Exception: Exception " + e.toString());
    } finally {
        httpGet.abort();
    }
    System.out.println("doGetRequest > json: " + json);
    return json;
}

私は例外を取得しています: Exception android.os.NetworkOnMainThreadException","code":"503" on this line: HttpClient httpClient = new DefaultHttpClient();

誰でもこのエラーを解決するのを手伝ってもらえますか?

ありがとう

4

1 に答える 1

1

ドキュメントを参照してください。基本的に、(たとえば) AsyncTaskを起動し、その中でメソッドを呼び出す必要があります。

2番目のリンクから:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

作成されたタスクは、非常に簡単に実行されます。

 new DownloadFilesTask().execute(url1, url2, url3);

あなたの場合、もちろん、doGetRequest代わりに呼び出す必要がありますDownloader.downloadFile(urls[i])

于 2013-04-05T22:36:42.433 に答える