繁体   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