簡體   English   中英

使用Volley在android中發送原始數據

[英]Send Raw Data in android using Volley

我正在嘗試發送帶有原始數據的http發布請求。

可能是一個重復的問題..堅果,我已經嘗試了很多,但沒有得到任何確切的解決方法..可能是我無法理解的一些小錯誤。

原始數據格式如下所述

{result_data: [project,circuit]}

我在做什么:

public void MakeStrRawRequest(final String Tag, String url, final String appData, final ResponseListener responseListener) {

    //String uri = String.format(Locale.US, URL);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new com.android.volley.Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d(TAG, "String Success :" + response);
                }
            },
            new com.android.volley.Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, "String  Error In Request :" + error.toString());

                    NetworkResponse response = error.networkResponse;
                    if (error instanceof ServerError && response != null) {
                        try {
                            String res = new String(response.data,
                                    HttpHeaderParser.parseCharset(response.headers, "utf-8"));
                            // Now you can use any deserializer to make sense of data
                            //JSONObject obj = new JSONObject(res);
                            Logger.e(res);
                        } catch (UnsupportedEncodingException e1) {
                            // Couldn't properly decode data to string
                            e1.printStackTrace();
                        }
                    }
                }
            }) {
        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            return super.parseNetworkResponse(response);
        }

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            HashMap<String, String> hashMap = new HashMap<>();
            hashMap.put("result_data", "[project,circuit]");
            // {result_data: [project,circuit]}
            return hashMap;
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            return appData.getBytes();
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            String AuthToken = "auto_token_value";
            headers.put(ApiConstant.TOKEN_KEY, AuthToken);
            return headers;
        }
    };
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(15000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    ApplicationData.getInstance().getRequestQueue().add(stringRequest);
}

這是我得到的答復。

BasicNetwork.performRequest: Unexpected response code 400 

我嘗試了兩種方法來發送數據1.在getParam()和2.在getBody()中

  1.   @Override 
    protected Map<String, String> getParams() throws AuthFailureError {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("result_data", "[project,circuit]");
        // {result_data: [project,circuit]} 
        return hashMap;
    } 

  2.
    @Override 
    public byte[] getBody() throws AuthFailureError {
        return appData.getBytes();
    } 

getBody和getParams都用於發送參數,因此,您一次只能調用一個方法。如果要發送任意字符串,請使用getBody()方法 ; 另一方面 ,如果要發送常規參數,則應該使用getBody()方法。有關更多詳細信息,請參見此處

暫無
暫無

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

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