android.os.NetworkOnMainThreadException异常“,”代码“:”503“

时间:2013-04-05 22:30:12

标签: android

这是我的代码:

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();

有人可以帮我解决此错误吗?

由于

1 个答案:

答案 0 :(得分:1)

查看documentation。基本上,您需要启动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])