我是Volley的新手,我正尝试使Post request与
JsonArrayRequest
从关于stackoverflow的许多答案中,我尝试了如下操作-
private void getCounts() {
String url = "http://192.168.1.100/json/count.php";
JsonArrayRequest req = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidepDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Log.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
hidepDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("LastUpdatedAt", "0");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
headers.put("User-agent", "My useragent");
return headers;
}
@Override
public byte[] getBody() {
Map<String, String> params = new HashMap<String, String>();
params.put("LastUpdatedAt", "0");
if (params != null && params.size() > 0) {
Log.d(TAG, encodeParameters(params, getParamsEncoding()).toString());
return encodeParameters(params, getParamsEncoding());
}
return null;
}
protected byte[] encodeParameters(Map<String, String> params, String paramsEncoding) {
StringBuilder encodedParams = new StringBuilder();
try {
for (Map.Entry<String, String> entry : params.entrySet()) {
encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding));
encodedParams.append('=');
encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding));
encodedParams.append('&');
}
return encodedParams.toString().getBytes(paramsEncoding);
} catch (UnsupportedEncodingException uee) {
throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee);
}
}
};
AppController.getInstance().addToRequestQueue(req);
}
可以看到,我已经尝试
getParams()
和getBody()
都将LastUpdatedAt
作为Post请求发送,但是无论我尝试什么,该值都不会发布,并且在服务器上返回null。我什至尝试使用
JsonArrayRequest(Request.Method.POST, ...
并通过在请求中将'params'作为JsonObject发送,但即使这两个也不起作用。在similar question之一中,建议使用以下类-
public class CustomJsonRequest extends Request {
Map<String, String> params;
private Response.Listener listener;
public CustomJsonRequest(int requestMethod, String url, Map<String, String> params,
Response.Listener responseListener, Response.ErrorListener errorListener) {
super(requestMethod, url, errorListener);
this.params = params;
this.listener = responseListener;
}
@Override
protected void deliverResponse(Object response) {
listener.onResponse(response);
}
@Override
public Map<String, String> getParams() throws AuthFailureError {
return params;
}
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
但是我无法使工作的响应列表器
createRequestSuccessListener
及其错误侦听器。在相同的类似问题中,建议使用以下构造函数-
public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
Listener<JSONArray> listener, ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(),
listener, errorListener);
}
但是,我不知道如何使它工作?
最佳答案
尝试做类似的事情:
String url = "http://192.168.1.100/json/count.php";
final JSONObject _jsonRequest = new JSONObject();
_jsonRequest.put("key", value);
JsonArrayRequest _stringRequest = new JsonArrayRequest(
url , new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
// Your code here
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Your code here
}
}){
@Override
public byte[] getBody() {
try {
return _jsonRequest.toString().getBytes(getParamsEncoding());
} catch (UnsupportedEncodingException uee) {
return null;
}
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> _params = new HashMap<String, String>();
_params.put("Content-type", "application/json");
return _params;
}
};
AppController.getInstance().addToRequestQueue(_stringRequest);
关于android - Volley JsonArrayRequest发布请求不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29857933/