android.os.NetworkOnMainThreadException innen AsyncTask
Ich Baue eine Anwendung und bin immer ein NetworkOnMainThreadException INNEN ein AsyncTask
Nennen:
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
Ich bin sehr verwirrt, warum diese Ausnahme wird geworfen in das tun, in der doInBackground eines AsyncTask, irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bewegen Sie den
JSON
code indoInBackground()
:AsyncTask
auf den main-UI-Thread, außer fürdoInBackground()
. Die Allgemeine Idee ist, die Unterstützung der gemeinsamen Nutzung-Fälle wie den folgenden: richten Sie IhreProgressBar
imonPreExecute()
aktualisieren Sie IhrenProgressBar
imonProgressUpdate()
, und schließlich entlassen IhreProgressBar
imonPostExecute()
. All diese Funktionen sind UI-Thread sicher währenddoInBackground()
sicher nehmen so viel Zeit wie es braucht.result.getEntity().getContent()
öffnet einen stream, der liest aus dem Netzwerk, also die Kommunikation über das Netzwerk IST in den Haupt-thread. Bewegen Sie die JSON ParsendoInBackground()
- und nicht nur die UI-Aufgaben inonPostExecute()
.onPostExicute
ist auf dem Haupt-thread?onPreExecute()
zu. Alles, was Sie wissen müssen, finden Sie hier: developer.android.com/reference/android/os/AsyncTask.htmlIch denke, das problem tritt auf, da Ihre Erben die
MainActivity
in IhreAsyncTask
versuchen reomve diesen Teil des Codes:Da Sie nicht brauchen, und wenn Sie möchten, übergeben Sie die Argumente der
AsyncTask
Sie können führen Sie es durch diedoInBackGround()
Methode immediatliy.Auch Ihren Anruf
AsyncTask
verwenden Sie die folgendennew POST().execute();
Außerdem brauchen Sie nicht zu rufen
super.onPostExecute(result);
in IhreonPostExecute()
Methode.Ich hoffe, dass dies helfen.