使用Gson + Volley解析JSONArray没有得到回应
所以我试图从json中使用Google的Gson库和Volley对HTTP请求解析一个对象数组。我的问题是,好像的代码不是'打''OnResponse
请致电。我已经尝试在函数中添加一个简单的日志打印输出,以查看它是否执行了任何操作。使用Gson + Volley解析JSONArray没有得到回应
我的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);
}
尝试开始
RequestQueue helper = Volley.newRequestQueue(mContext);
这已经完成或helper.add(getMeetings)调用会抛出一个NPE – zgc7009
加入这一行添加这些行
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(stringRequest);
如果您不想在缓存中保存响应,请添加此
requestQueue.add(stringRequest);
根据我个人的意见,如果您通过应用程序上下文更好。
我不认为这真的回答了这个问题,我的helper.add正在调用我的应用程序类中定义的请求队列 –
尝试制作JsonObjectRequest,然后使用GSON解析响应,以查看请求类本身是否有错误。据了解,Google文档有一些过时的训练数据。 – zgc7009
是'onErrorResponse'被调用?如果是的什么是日志 – Bharatesh