这是我的代码:
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();
有人可以帮我解决此错误吗?
由于
答案 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])