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;
}

我收到异常: 异常 android.os.NetworkOnMainThreadException","code":"503" 在这一行: HttpClient httpClient = new DefaultHttpClient();

谁能帮我解决这个错误?

谢谢

4

1 回答 1

1

查看文档。基本上,您需要启动一个AsyncTask(例如)并在其中调用您的方法。

从第二个链接:

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 回答