NetworkOnMainThread

8

Ich erhalte eine NetworkOnMainThreadException, wenn ich versuche, den folgenden Code zu implementieren:

%Vor%

und der Handler:

%Vor%

}

Irgendeine Idee warum? Es sollte funktionieren, alle Tutorials, die ich gelesen habe, behandeln dies als Arbeitscode, aber es wird nicht ausgeführt und nur die Ausnahme ausgelöst. Ich habe gelesen, dass ich asynctask möglicherweise implementieren muss, aber ich neu bin und nicht sicher bin, welche Teile ihren eigenen Faden benötigen. Danke für jede Hilfe, Kritik (konstruktiv), Vorschläge usw.

    
Bob 16.03.2012, 23:38
quelle

3 Antworten

10
  

Irgendeine Idee warum?

Wenn dieser Codeabschnitt im Hauptanwendungs-Thread ausgeführt wird, führen Sie Netzwerk-I / O im Hauptanwendungs-Thread aus.

  

Ich habe gelesen, dass ich möglicherweise asynctask implementieren muss, aber ich bin neu und nicht sicher, welche Teile ihren eigenen Thread benötigen.

Ich würde die Netzwerk-E / A und das Parsen in doInBackground() und den setListAdapter() -Aufruf in onPostExecute() eines AsyncTask setzen.

    
CommonsWare 16.03.2012, 23:41
quelle
3

Wenn Sie Ihren Code einfach testen möchten und noch keine weiteren Komplikationen hinzufügen möchten, können Sie dies zu Ihrem onCreate()

hinzufügen %Vor%

Sie möchten nicht, dass dies dauerhaft ist, da Netzwerkvorgänge im Benutzeroberflächen-Thread eine schlechte Erfahrung bei der Verwendung der App darstellen, aber beim Testen nützlich sein können.

    
The Holo Dev 17.03.2012 02:10
quelle
1

Zu der CommonsWare-Antwort hinzugefügt, wurde die NetworkOnMainThreadException irgendwann zwischen 2.3.3 (Gingerbread_MR1) und 3.0 (Honeycomb) hinzugefügt. Wenn Sie sich

ansehen %Vor%

Sie finden das folgende Stück Code:

%Vor%

Ich denke, dass die Tutorials, denen Sie gefolgt sind, geschrieben wurden, bevor dies eingeführt wurde, und so nicht die NetworkOnMainThreadException verursacht haben. Befolgen Sie die Anweisungen von CommonsWare bezüglich AsyncTask und Sie werden Ihren Fehler beheben.

    
louielouie 17.03.2012 01:10
quelle