【问题标题】:Send Raw Data in android using Volley使用 Volley 在 android 中发送原始数据
【发布时间】:2018-02-27 20:48:11
【问题描述】:

我正在尝试发送带有原始数据的 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.在 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();
    } 

【问题讨论】:

  • 您在 appData 变量中存储数据的位置?
  • 您将原始数据添加到何处发送到服务器?
  • @Mafujul 原始数据在 String appData 参数中

标签: android web-services android-volley


【解决方案1】:

getBody 和 getParams 都用于发送参数。所以,你应该一次只调用一个方法。如果你想发送 任意字符串,那么使用 getBody() 方法 如果你想发送普通参数,那么你应该使用 getBody() 方法。更多细节你可以看到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 2022-08-14
    • 1970-01-01
    • 2014-09-15
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多