Tôi đang xây dựng một ứng dụng và nhận được một NetworkOnMainThreadException INSIDE một AsyncTaskandroid.os.NetworkOnMainThreadException bên AsyncTask
Gọi:
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());
}
}
}
LogCat:
BackgroundError | android.os.NetworkOnMainThreadException
Tôi rất bối rối vì sao ngoại lệ này được ném vào trong doInBackground của AsyncTask, bất kỳ ý tưởng nào?
Mọi thứ trong 'AsyncTask' đều nằm trong Giao diện người dùng chính ngoại trừ 'doInBackground()'. Ý tưởng chung là hỗ trợ các trường hợp sử dụng phổ biến như sau: Thiết lập 'ProgressBar' của bạn trong' onPreExecute() ', cập nhật' ProgressBar' của bạn trong 'onProgressUpdate()', và cuối cùng loại bỏ 'ProgressBar' của bạn trong' onPostExecute () '. Tất cả các chức năng này là UI Thread an toàn trong khi 'doInBackground()' có thể mất nhiều thời gian khi cần. –