如何将字符串数组作为参数发送到srver并在服务器上传数据时获取错误--onErrorResponse(VolleyError错误)

时间:2016-11-03 05:11:07

标签: php android arrays json android-volley

我正在向服务器发送一些数据,以便将其保存在服务器数据库中。但我继续犯错误。我在其他一些情况下使用了相同的方法,并且工作正常。但我不知道为什么在这种情况下它不起作用。请告诉我上传数据的正确方法,以及如何将数据作为字符串数组发送到服务器。因为你可以看到我保持'类别'和'子类别' as null因为这两个数据在数组中(用户选择的多个选项)...请帮助:) 这是我的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)

2 个答案:

答案 0 :(得分:0)

getParams()

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

不要通过null获取值,而不是通过""

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

可能就是为什么会出现错误。

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

答案 1 :(得分:0)

我还有第二个问题的解决方案..这里是:

     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);
            }

通过这种方式,我们可以将String和String数组作为参数...

发送