Der richtige Weg ist Antwort.body().string() außer response.body.toString()
Ich verwende das Jetty-Servlet, die URL lautethttp://172.16.10.126:8789/test/path/jsonpagejedes Mal, wenn Sie diese URL anfordern, wird sie zurückgegeben
Es wird angezeigt, wenn Sie die URL in einen Browser eingeben. Leider zeigt es eine andere Speicheradresse als die JSON-Zeichenfolge, wenn ich eine Anfrage mit stelle Okhttp.
Es konstruiert ein String-Objekt aus den Zeichenbytes und dem Zeichensatz.
– Nikola Despotoski
30. Januar 2015 um 21:07 Uhr
@NikolaDespotoski danke! Es war mein eigener Fehler. ich ersetzte response.body().string() zu response.body().toString()…
– Haifeng Zhang
2. Februar 2015 um 16:37 Uhr
@haifzhan Danke für die Erläuterung der Verwendung von response.body().string() anstelle von response.body().toString()
– Benutzer3144836
16. Februar 2016 um 4:07 Uhr
Neulinge
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(urls[0])
.build();
Response responses = null;
try {
responses = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
String jsonData = responses.body().string();
JSONObject Jobject = new JSONObject(jsonData);
JSONArray Jarray = Jobject.getJSONArray("employees");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject object = Jarray.getJSONObject(i);
}
}
Beispiel zum Hinzufügen zu Ihren Spalten:
JCol employees = new employees();
colums.Setid(object.getInt("firstName"));
columnlist.add(lastName);
Ich bekomme jetzt die Ausnahme: org.json.JSONException: Value [email protected] of type java.lang.String cannot be converted to JSONObject
– Gökul NC
18. März 2017 um 17:18 Uhr
sehr einfacher Fehler ist zu verwirren .string() mit ‘.toString()’
– Zapnologica
11. Juli 2017 um 12:42 Uhr
Sie sollten angeben, woher Sie die Objekte erhalten, z. B. das JSONObject. Bitte fügen Sie auch die Importe hinzu.
– Diego Alves
15. Januar 2018 um 16:38 Uhr
Ich versuche, eine einfache Anfrage mit Okhttp (3.xx) durchzuführen. Ist dies die Grundlage für eine Anfrage?
– Rock Rock
27. April 2018 um 6:50 Uhr
responses.body().string() kann nur einmal aufgerufen werden verwenden Sie diesen Code direkt: //String jsonData = responses.body().string(); JSONObject Jobject = new JSONObject(responses.body().string());
Ich glaube also, nachdem der Wert einmal aus dem Körper abgerufen wurde, wird er leer.
Vorschlag: Speichern Sie es in String, der viele Male verwendet werden kann.
Ich danke dir sehr. Ich habe eine Weile versucht, das herauszufinden, und keine der obigen Antworten hat wirklich geholfen, weil ich zuerst den ganzen Körper protokolliert und dann versucht habe, die Zeichenfolge zu bekommen, und das war eigentlich das Problem.
– Saad Ismail
17. Juli 2018 um 12:47 Uhr
Philipp Kigenyi
Ich hoffe, Sie haben es geschafft, die JSON-Daten aus der JSON-Zeichenfolge zu erhalten.
Nun, ich denke, das wird hilfreich sein
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(urls[0])
.build();
Response responses = null;
try {
responses = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
String jsonData = responses.body().string();
JSONObject Jobject = new JSONObject(jsonData);
JSONArray Jarray = Jobject.getJSONArray("employees");
//define the strings that will temporary store the data
String fname,lname;
//get the length of the json array
int limit = Jarray.length()
//datastore array of size limit
String dataStore[] = new String[limit];
for (int i = 0; i < limit; i++) {
JSONObject object = Jarray.getJSONObject(i);
fname = object.getString("firstName");
lname = object.getString("lastName");
Log.d("JSON DATA", fname + " ## " + lname);
//store the data into the array
dataStore[i] = fname + " ## " + lname;
}
//prove that the data was stored in the array
for (String content ; dataStore ) {
Log.d("ARRAY CONTENT", content);
}
Denken Sie daran, AsyncTask oder SyncAdapter(IntentService) zu verwenden, um eine NetworkOnMainThreadException zu verhindern
Importieren Sie auch die okhttp-Bibliothek in Ihre build.gradle
compile 'com.squareup.okhttp:okhttp:2.4.0'
Der folgende Code dient zum Abrufen von Daten vom Online-Server mithilfe der GET-Methode und der okHTTP-Bibliothek für Android Kotlin …
Log.e(“Haupt”,Antwort.body!!.string())
in obiger Zeile !! ist das Ding, mit dem Sie den Json aus dem Antworttext abrufen können
val client = OkHttpClient()
val request: Request = Request.Builder()
.get()
.url("http://172.16.10.126:8789/test/path/jsonpage")
.addHeader("", "")
.addHeader("", "")
.build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
// Handle this
Log.e("Main","Try again latter!!!")
}
override fun onResponse(call: Call, response: Response) {
// Handle this
Log.e("Main",response.body!!.string())
}
})
shoolpani dubey
Ich möchte noch eine Beobachtung hinzufügen. Sie können die Methode .string() nur einmal aufrufen. Wenn Sie versuchen, es zweimal anzurufen, erhalten Sie eine illegale Zustandsausnahme.
Es konstruiert ein String-Objekt aus den Zeichenbytes und dem Zeichensatz.
– Nikola Despotoski
30. Januar 2015 um 21:07 Uhr
@NikolaDespotoski danke! Es war mein eigener Fehler. ich ersetzte
response.body().string()
zuresponse.body().toString()
…– Haifeng Zhang
2. Februar 2015 um 16:37 Uhr
@haifzhan Danke für die Erläuterung der Verwendung von response.body().string() anstelle von response.body().toString()
– Benutzer3144836
16. Februar 2016 um 4:07 Uhr