使用Volley在android中发送原始数据

时间:2017-09-19 07:11:36

标签: android web-services android-volley

我正在尝试使用原始数据发送http post请求。

可能是一个重复的问题..坚果我已经尝试了很多,但没有得到任何确切的解决方案.. 可能有一些我无法理解的小错误。

原始数据格式如下所述

{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.in 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();
    } 

1 个答案:

答案 0 :(得分:1)

getBody和getParams都用于发送参数。因此,您应该一次只调用一个方法。如果您想发送任意字符串,请使用 getBody()方法< / strong>以及在其他方面,如果你想发送正常参数,那么你应该使用 getBody()方法。有关更多细节,你可能会看到here