我发送一些数据到服务器,以便将其保存在服务器数据库中。但是我总是出错。我在其他一些情况下也使用了同样的方法,效果很好。但我不知道为什么在这种情况下它不起作用。请告诉我上传数据的正确方法,以及如何将数据作为字符串数组发送到服务器。因为正如你所看到的,我保持"类别"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);
}
这样我们可以发送字符串和字符串数组作为参数…