Sto costruendo un'applicazione e sto ottenendo un NetworkOnMainThreadException ALL'INTERNO un AsyncTaskandroid.os.NetworkOnMainThreadException all'interno AsyncTask
chiamata:
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
Sono molto confuso perché questa eccezione viene lanciata nel DoInBackground di un AsyncTask, qualche idea?
Tutto in 'AsyncTask' si trova sul thread principale dell'interfaccia utente tranne per' doInBackground() '. L'idea generale è di supportare casi d'uso comuni come i seguenti: Configura il tuo 'ProgressBar' in 'onPreExecute()', aggiorna il tuo' ProgressBar' in 'onProgressUpdate()', e infine elimina il tuo 'ProgressBar' in 'onPostExecute () '. Tutte queste funzioni sono thread UI sicuro mentre 'doInBackground()' può tranquillamente impiegare tutto il tempo necessario. –