【发布时间】:2016-04-14 13:26:54
【问题描述】:
因此,我尝试使用 Google 的 Gson 库和 Volley 解析来自 json 的对象数组以进行 HTTP 请求。我的问题是,好像代码没有“命中”OnResponse 调用。我尝试在函数中添加一个简单的日志打印输出,以查看它是否有任何作用。
我的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 和 volley,它可以完美运行,如下所示:
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 文档有一些过时的训练数据挥之不去。
-
is
onErrorResponse被调用?.. 如果是,日志是什么
标签: java android json gson android-volley