Итак, я пытаюсь разобрать массив объектов из json, используя библиотеку Gson Google и Volley для HTTP-запросов. Моя проблема в том, что это как будто код не «ударил» OnResponse
звонок. Я попытался добавить простую распечатку журнала внутри функции, чтобы убедиться, что она что-то делает.Разбор JSONArray с использованием Gson + Volley не получает ответа
Мой GsonRequest
класс приходит прямо от Google's Training Docs. Я построил эти методы на основе ответа на вопрос this question.
Это мой код:
private void runVolleyJson() throws AuthFailureError {
GsonRequest<Meetings> getMeetings = new GsonRequest<Meetings>(AUTH_URL, Meetings.class, getHeaders(),
createMyReqSuccessListener(),
createMyReqErrorListener());
helper.add(getMeetings);
}
private Response.Listener<Meetings> createMyReqSuccessListener() {
return new Response.Listener<Meetings>() {
@Override
public void onResponse(Meetings response) {
// NOTHING HAPPENS FROM HERE!
try {
Log.d("response", response.toString());
} catch (Exception e) {
e.printStackTrace();
}
// Do whatever you want to do with response;
// Like response.tags.getListing_count(); etc. etc.
}
};
}
private Response.ErrorListener createMyReqErrorListener() {
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Do whatever you want to do with error.getMessage();
}
};
}
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> map = new HashMap<>();
map.put("Content-Type", "application/json;");
map.put("Authorization", "Bearer <sometoken>");
return map;
}
Там нет абсолютно никаких ошибок. Он разрешает запрос, но ничего не происходит в OnResponse
, он просто игнорирует эту функцию.
Теперь я попытался с помощью стандартного StringRequest
с залпом, и она работает безупречно, как это:
private void runVolleyTest() {
StringRequest request = new StringRequest(Request.Method.GET, AUTH_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonarray = new JSONArray(response);
for(int i = 0; i < jsonarray.length(); i++) {
Gson gson = new Gson();
Meeting m = gson.fromJson(jsonarray.get(i).toString(), Meeting.class);
Log.e("Meeting", m.getMeetingId() + " " + m.getStatus());
}
} catch (JSONException e) {
e.printStackTrace();
}
;
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
txtError(error);
}
}) {
@Override
public Map<String, String> getHeaders() {
HashMap<String, String> map = new HashMap<>();
map.put("Content-Type", "application/json;");
map.put("Authorization", "Bearer <sometoken>");
return map;
}
};
//request.setPriority(Request.Priority.HIGH);
helper.add(request);
}
Попробуйте сделать JsonObjectRequest, а затем проанализируйте ответ с помощью GSON, чтобы убедиться, что класс запроса сам по себе не работает. Известно, что в документах Google есть устаревшие данные о тренировках. – zgc7009
is 'onErrorResponse' получает вызов? .. если да, то что такое журнал – Bharatesh