내부android.os.NetworkOnMainThreadException AsyncTask를
전화 :
new POST(this).execute("");
AsyncTask를 :
public class POST extends AsyncTask<String, Integer, HttpResponse>{
private MainActivity form;
public POST(MainActivity form){
this.form = form;
}
@Override
protected HttpResponse doInBackground(String... params) {
try {
HttpPost httppost = new HttpPost("http://diarwe.com:8080/account/login");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add(new BasicNameValuePair("email",((EditText)form.findViewById(R.id.in_email)).getText().toString()));
//add more...
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
return new DefaultHttpClient().execute(httppost);
} catch (Exception e) {
Log.e("BackgroundError", e.toString());
}
return null;
}
@Override
protected void onPostExecute(HttpResponse result) {
super.onPostExecute(result);
try {
Gson gSon = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
gSon.fromJson(IOUtils.toString(result.getEntity().getContent()), LogonInfo.class).fill(form);
} catch (Exception e) {
Log.e("BackgroundError", e.toString());
}
}
}
로그 캣 :
BackgroundError | android.os.NetworkOnMainThreadException
나는이 예외가 왜 doInBackground의 AsyncTask에서 던져 졌는지 혼란 스럽다.
@Override
protected HttpResponse doInBackground(String... params) {
...
Your current HttpPost code...
...
Gson gSon = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
gSon.fromJson(IOUtils.toString(result.getEntity().getContent()), LogonInfo.class).fill(form);
...
}
'AsyncTask'의 모든 것은'doInBackground()'를 제외하고 메인 UI 스레드에 있습니다. 일반적인 아이디어는 다음과 같은 일반적인 유즈 케이스를 지원하는 것입니다 : onPreExecute()에서'ProgressBar'를 설정하고,'onProgressUpdate()'에서'ProgressBar'를 업데이트하고, 마지막으로'ProgressBar'를'onPostExecute)'. 이 모든 함수는 UI 쓰레드에 안전하지만'doInBackground()'는 필요한만큼의 시간을 안전하게 가져갈 수 있습니다. –