我尝试通过凌空向服务器发送数组列表,但是我的响应方法收到null 我用以下代码制作ArrayList:
final ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < questions.size(); i++) {
//addToServer(questions.get(i),questions.size());
HashMap<String, String> params = new HashMap<String, String>();
params.put("TestId", questions.get(i).getTestId() + "");
params.put("Number", questions.get(i).getNumber() + "");
arrayList.add(params);
}
listOfQ = new JSONArray(arrayList);
并通过以下代码将其发送到服务器:
public void addToServer2() {
if(requestQueue == null){
requestQueue = Volley.newRequestQueue(myContext);
}
request = new StringRequest(Request.Method.POST, ServiceApi.URL_send_question2, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("test", listOfQ.toString());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return super.getHeaders();
}
};
requestQueue.add(request);
}
这是我的PHP代码,它获取arraylist并将一个值返回给android端:
$arr = array();
$jsonarray = array();
$json = $_POST['test'];
$jsonarray = json_decode($json,true);
foreach((array) $jsonarray as $key){
$TestId = $key["TestId"];
$arr[] = array('id' => $TestId);
}
当我调试应用程序时,它会向我显示此响应:id:null
答案 0 :(得分:0)
我认为您犯了一些错误。
尝试一下
1.创建一个JSON对象。
2.创建一个JSON数组,并使用for循环将所有列表数据存储到其中。
3.将您的JSON数组存储到JSON对象中。(在for循环结束之后)。
4.因为您将需要以json类型但以String Body格式发送此数据,所以
String requestBody=your_json_object.toString()
。
5.使用StringRequest
时,必须以字符串格式发送url,并且响应将是字符串格式。
6.在错误侦听器之后,您需要添加这些行(在一个大括号中)
{
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
return null;
}
}
7。在此方法下面,您将需要添加标题参数以进行身份验证。
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "multipart/form-data");
headers.put("Authorization", "sometoken_or_id");
return headers;
}
requestQueue.add(request);