簡體   English   中英

使用Gson + Volley解析JSONArray沒有得到響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM