내 안드로이드 애플 리케이션에서 일부 HTTP 요청을해야합니다. 필요에 따라 네트워크 부분이 doInBackground에있는 AsyncTask를 사용합니다.NetworkOnMainThreadException with AsyncTask
public class AsyncRequest extends AsyncTask<Void, Integer, HttpResponse>{
private ProgressDialog dialog;
private Activity activity;
private HttpUriRequest query;
private HttpClient client;
private HttpResponse response;
private String dialogMsg;
private String uri;
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public AsyncRequest(Activity a, HttpUriRequest q, HttpClient c, String m) {
query = q;
client = c;
activity = a;
dialog = new ProgressDialog(a);
dialogMsg = m;
}
@Override
protected void onPostExecute(HttpResponse res) {
if (dialog.isShowing())
dialog.dismiss();
}
protected void onPreExecute() {
this.dialog.setMessage(dialogMsg);
this.dialog.show();
}
@Override
protected HttpResponse doInBackground(Void... arg0) {
try {
response = client.execute(query);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
protected HttpResponse getResponse() {
return response;
}
}
이 그리고, 내 UI 스레드에서, 나는 그것을 이런 식으로 사용합니다 : 여기
는 내 요청 클래스입니다AsyncRequest request;
HttpClient httpClient = new DefaultHttpClient();
HttpGet getQuery = new HttpGet("Here goes my url");
HttpResponse response = null;
String rt = "Null";
getQuery.setHeader("Authorization", getIntent().getExtras().getString("token"));
request = new AsyncRequest(this, getQuery, httpClient, "Loading events...");
try {
response = request.execute().get(3, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
HttpEntity entity = response.getEntity();
try {
rt = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
return ;
}
그래서, 난 안드로이드 초보자,하지만 난이 추측 네트워크 관련 코드가 주 스레드에서 실행될 때 예외가 발생합니다. 하지만 내 doInBackground() 메서드에서 client.execute() 실행됩니다. 문제를 일으키는 execute(). get() (ui 스레드에서) 호출입니까?
다시 포맷 코드에 blackbelt하여 답을 확인하고는 일이었다 그래서 로그 캣 –