簡體   English   中英

如何獲得Volley POST響應正文?

[英]How to get Volley POST response body?

我正在使用類似的功能來創建GET和POST api請求,但是GET函數將textview設置為響應正文,我不知道如何讀取狀態代碼,而POST函數將textview設置為響應代碼,也不知道如何讀取響應身體。 你能幫我嗎?

我也嘗試登錄parseNetworkResponse()response.data.toString(),但這不是api返回的數據。 也許我需要以某種方式對其進行編碼?

public void createGet(Context context, String url) {
      final TextView apiResultTextview = (TextView) ((Activity) 
  context).findViewById(R.id.api_result_textview);
      // Instantiate the RequestQueue.
         RequestQueue queue = Volley.newRequestQueue(context);

    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // Display the first 500 characters of the response string.
                    apiResultTextview.setText("Response is: " + response.substring(0, 50));
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            apiResultTextview.setText(error.toString());
        }
    });

    // Add the request to the RequestQueue.
    queue.add(stringRequest);
}

public void createPost(Context context, String url, JSONObject body) {
    final TextView apiResultTextview = (TextView) ((Activity) context).findViewById(R.id.api_result_textview);
    RequestQueue requestQueue = Volley.newRequestQueue(context);
    final String mRequestBody = body.toString();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("LOG_RESPONSE", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("LOG_RESPONSE", error.toString());
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
                return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
                apiResultTextview.setText("Response is: " + responseString);
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };
    requestQueue.add(stringRequest);
}

在您的onResponse()方法中添加此代碼

 JSONObject jsonObj = new JSONObject(response);
 String response_value = jsonObj.getString("response");

我通過更改下面的代碼調用方法解決了這一問題。 問題可能出在JsonObjectRequest與StringRequest中。 這就是為什么我只得到響應代碼字符串的原因。

public void createCall(int type, String url, JSONObject data, final int callback) {
    JsonObjectRequest jsonRequest = new JsonObjectRequest(type, url,data,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("Response", response.toString());
                    try {
                        callback(response, callback);
                    } catch (Exception e){
                        Log.d("API callback error", e.getMessage());
                    }

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("Error response", error.toString());
                }
            }
    );
    queue.add(jsonRequest);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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