如何发送字符串数组作为参数到服务器和获取错误,而在服务器上上传数据——onErrorResponse(排球错误)


How to send String Array as param to srver and Getting error while uploading data on server --onErrorResponse (VolleyError error)

我发送一些数据到服务器,以便将其保存在服务器数据库中。但是我总是出错。我在其他一些情况下也使用了同样的方法,效果很好。但我不知道为什么在这种情况下它不起作用。请告诉我上传数据的正确方法,以及如何将数据作为字符串数组发送到服务器。因为正如你所看到的,我保持"类别"answers"子类"为空,因为这两个的数据是在数组中(由用户选择的多个选择)…请帮忙:)下面是我的uploadData方法:

        private void uploadData(){
        StringRequest stringRequest = new StringRequest(Request.Method.POST,UPLOAD_URL,new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("sub response", response);
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    String er=error.getMessage();
                    Log.d("error is",er);
                    Toast.makeText(UpdateUserProfile.this,er,Toast.LENGTH_LONG).show();
                    //Log.d("","error message"+er);
                }
            }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<String, String>();
            params.put("user_id",user_id);
            params.put("first_name",f_name.getText().toString());
            params.put("last_name",l_name.getText().toString());
            params.put("mobile_number",contact.getText().toString());
            params.put("zip_code",z_code.getText().toString());
            params.put("state",state_id_only);
            params.put("region",region_id_only);
            params.put("address",user_address.getText().toString());
            params.put("category",null);
            params.put("sub_category",null);
            params.put("advertise_image",image);
            return params;
        }
    };

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}  //end =================purpose==========================

,每次我点击按钮上传数据,我得到这个例外:

     java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
        at libcore.net.UriCodec.encode(UriCodec.java:132)
        at java.net.URLEncoder.encode(URLEncoder.java:57)
        at com.android.volley.Request.encodeParameters(Request.java:450)
        at com.android.volley.Request.getBody(Request.java:436)
        at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:260)
        at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:234)
        at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107)
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)

getParams()

params.put("category",null);
params.put("sub_category",null);

不传递null的值,而传递""

params.put("category","");
params.put("sub_category","");

可能就是这个原因。

关于发送数据数组:您可以尝试使用JSONArray发送数据数组。

我也有第二个问题的解决办法。

     int i=0;
            for(String object: selectedcate){
             params.put("category["+(i++)+"]", object);
            }
           // params.put("category","");
            int s=0;
            for(String object: selected_sub_cate){
                params.put("sub_category["+(s++)+"]", object);
            }

这样我们可以发送字符串和字符串数组作为参数…