Как OkHttp получает строку Json?
Решение:
Это была ошибка на моей стороне.
Правильный путь response.body(). string(), кроме response.body.toString()
Im, использующий серфинг Jetty, URL-адрес http://172.16.10.126:8789/test/path/jsonpage
, каждый раз, когда он запрашивает этот URL-адрес, он возвращает
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
Показывается, когда введите url в браузер, к сожалению, он показывает вид адреса памяти, отличный от строки json, когда я запрашиваю Okhttp
.
TestActivity﹕ [email protected]
Код Okhttp Im используя:
OkHttpClient client = new OkHttpClient();
String run(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
Может ли кто-нибудь помочь?
Ответы
Ответ 1
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);
}
}
Пример добавьте в свои столбцы:
JCol employees = new employees();
colums.Setid(object.getInt("firstName"));
columnlist.add(lastName);
Ответ 2
Я также столкнулся с той же проблемой
используйте этот код:
// notice string() call
String resStr = response.body().string().toString();
JSONObject json = new JSONObject(resStr);
он определенно работает
Ответ 3
Надеюсь, вам удалось получить json-данные из строки json.
Хорошо, я думаю, что это поможет
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);
}
Не забудьте использовать AsyncTask или SyncAdapter (IntentService), чтобы предотвратить получение NetworkOnMainThreadException
Также импортируйте библиотеку okhttp в файл build.gradle
compile 'com.squareup.okhttp:okhttp:2.4.0'
Ответ 4
Как я заметил в своем коде.
Если после того, как значение будет получено из тела Response, оно станет пустым.
String str = response.body().string(); // {response:[]}
String str1 = response.body().string(); // BLANK
Итак, я верю, что после извлечения значения из тела он становится пустым.
Предложение: Храните его в String, который можно использовать много раз.