OkHttp Library - NetworkOnMainThreadException auf einfachen Post
Möchte ich OkHttp Bibliothek für die Vernetzung in Android.
Ich begann mit der einfachen post Beispiel, wie geschrieben, in Ihrer website:
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
Mit diesem Aufruf:
String response = post("http://www.roundsapp.com/post", json);
Dieser Aufruf endet mit NetworkOnMainThreadException.
Ich wickeln konnte der call mit einem AsyncTask, aber soweit ich das verstanden habe aus den Beispielen, die OkHttp-Bibliothek sollte schon aufgepasst werden, dass..
Mache ich etwas falsch?
Kommentar zu dem Problem
möglich, Duplikat der android.os.NetworkOnMainThreadException Hast du einmal darüber nachdenken, suchen Sie zuerst?
Es hat nichts mit dem zu tun.. die Frage nochmal Lesen. Fett gedruckten Teile vor allem. Denken Sie über zuerst Lesen?
Ich habe gelesen, dass die Frage, und es hat auch alles damit zu tun. Sie sind dong Netzwerk-IO auf dem Haupt-thread. Es spielt keine Rolle, was Sie denken die Bibliothek ist zu tun, es ist nur eine Ursache für diese Ausnahme.
Ich habe nicht gefragt, was ist der Ursache der Ausnahme. Ich fragte, was ist der richtige Weg, um es zu beheben. die Antwort, Die Sie Hinzugefügt wird, wird eine Antwort (die ich sehr gut kannte), aber es war nicht der richtige Weg! Der richtige Weg war geschrieben von @se_bastiaan.
Ich hier gelandet bei der Suche nach Beispiele für asynchrone Aufrufe, da die OkHttp-Seite nicht haben viele. Die Github-Seite, die @se_bastiaan verbunden, hat mehrere nützliche: github.com/square/okhttp/wiki/Recipes
InformationsquelleAutor der Frage Aviv Ben Shabat | 2015-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden, OkHttp die async-Methode.
Und dann Ihre Reaktion behandelt werden würde in der callback (OkHttp 2.x):
Oder OkHttp 3.x:
Werfen Sie einen Blick auf Ihre Rezepte für mehr Beispiele: https://github.com/square/okhttp/wiki/Recipes
InformationsquelleAutor der Antwort se_bastiaan
Entsprechend der OkHttp docs:
Es unterstützt sowohl synchrone blockierende Aufrufe und asynchrone Aufrufe mit callbacks.
Dein Beispiel ist auf der main thread und Android seit der version 3.0 wird diese Ausnahme, wenn Sie versuchen, network Anrufe auf Haupt-thread
Bessere option ist, es zu benutzen zusammen mit retrofit-und Gson:
http://square.github.io/retrofit/
https://code.google.com/p/google-gson/
Hier sind die Beispiele:
http://engineering.meetme.com/2014/03/best-practices-for-consuming-apis-on-android/
http://heriman.net/?p=5
InformationsquelleAutor der Antwort kjurkovic
Wenn Sie die folgenden Schritte zu implementieren, OKHTTP, dann auf jeden Fall wirst du mehrere API-Aufruf auf mehreren Bildschirm, indem nur zwei Zeilen code
Schritt 1:
Schritt 2 : Erstellen Sie eine Anfrage Klasse
/**
* Erstellt von Deepak Sharma auf 4/7/16.
* Dies ist ein HTTP-request Klasse, die die grundlegenden Parameter.
* Wenn Sie hinzufügen will, einige weitere Parameter ein, bitte machen Sie eine Unterklasse der Klasse
* und fügen Sie mit Ihrer Unterklasse. Ändern Sie nicht diese Klasse.
*/
Schritt 4 : Erstellen einer listener-Klasse
import android.util.Melden Sie;
import com.google.gson.Gson;
import java.io.IOException;
import dxswifi_direct.com.wifidirectcommunication.base.Modell.Anfrage.BaseHTTPRequest;
import okhttp3.Call;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Rückruf;
import okhttp3.Anfrage;
import okhttp3.RequestBody;
import okhttp3.Antwort;
/**
* Erstellt von Deepak Sharma auf 4/7/16.
* @E-Mail : [email protected]
* Dies ist eine Einfache java-Klasse, die Ihnen helfen, die für die HTTP-Anforderung/Antwort und es wird
* werfen Sie die Antwort auf Ihre Korrespondenz Aktivität.
*/
Schritt 5 : Aus der Tätigkeit, die Sie anfordern, implementieren listener
InformationsquelleAutor der Antwort Maddy