簡體   English   中英

使用volley-android獲取POST的HTTP正文響應

[英]Get the HTTP body response of a POST with volley-android

我正在嘗試獲取我的應用程序中的一些數據,並通過對Volley使用HTTP POST請求來向用戶顯示。 我的問題是我不知道如何獲得服務器主體對請求的響應。 在下面的代碼中,響應始終為“ 200”,它成為HTTP狀態代碼。

如何提取身體反應並以字符串形式進行管理?

 RequestQueue requestQueue = Volley.newRequestQueue(this);
    final String requestBody = Utility.toCorrectCase(req);
    //Decommentare solo per il debug
    //Toast.makeText(getBaseContext(),requestBody, Toast.LENGTH_SHORT).show();
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("VOLLEY", response);
            Bitmap myBitmap = QRCode.from(response).bitmap();
            qrcode.setImageBitmap(myBitmap);
            ViewGroup.LayoutParams params = qrcode.getLayoutParams();
            params.width =  qrDisplayedSize;
            params.height = qrDisplayedSize;
            qrcode.setLayoutParams(params);
            loadingText.setText(getString(R.string.prod_id_desc).concat(response));
            qrcode.setVisibility(View.VISIBLE);
            backButton.setVisibility(View.VISIBLE);
            progressBar.setVisibility(View.INVISIBLE);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("VOLLEY", error.toString());
            new SweetAlertDialog(getApplicationContext(), SweetAlertDialog.ERROR_TYPE)
                    .setTitleText("Errore comunicazione server")
                    .setContentText("Qualcosa non ha funzionato!\nDescrizione errore:".concat(error.toString()))
                    .show();
            finish();
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=utf-8";
        }

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

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString;
            responseString = String.valueOf(response.statusCode);

            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };
    requestQueue.add(stringRequest);

經過幾天的搜索,我發現我沒有正確覆蓋networkResponse。 因此,對於遇到同樣麻煩的每個人,我的問題的答案是:必須重寫parseNetworkResponse才能以最輕松的方式獲取響應正文。

            @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {

            if(response.statusCode==400){
                new SweetAlertDialog(getApplicationContext(), SweetAlertDialog.ERROR_TYPE)
                        .setTitleText("Errore comunicazione server")
                        .setContentText("Qualcosa non ha funzionato!\nCodice errore:"+response.statusCode)
                        .show();
                finish();
            }
            return super.parseNetworkResponse(response);
        }

改變它對我有用

@Override
    protected Response < String > parseNetworkResponse(NetworkResponse response) {

     String parsed;
     try {
      parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
     } catch (UnsupportedEncodingException e) {
      parsed = new String(response.data);
     }
     return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));

    }

暫無
暫無

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

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