[英]Parsing JSONArray using Gson + Volley not getting response
因此,我嘗試使用Google的Gson庫和Volley解析HTTP請求中的json對象數組。 我的問題是,好像代碼沒有“擊中” OnResponse
調用 。 我試圖在函數中添加一個簡單的Log打印輸出,只是看它是否有作用。
我的GsonRequest
類直接來自Google的Training Docs 。 我根據對這個問題的答案構造了這些方法。
這是我的代碼:
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);
添加這些行
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(stringRequest);
如果您不想將響應保存到緩存中,則添加此內容
requestQueue.add(stringRequest);
根據我個人的看法,如果您通過應用程序上下文,則更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.