Volley JsonArrayRequest无法向Server发送参数

时间:2016-05-29 14:02:58

标签: android json android-volley

我有JsonArrayRequest。我必须向服务器发送搜索关键字等参数并接收JsonArray。

我将此代码用于JsonArrayRequest stringRequest = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { pDialog.dismiss(); Log.e("response : ",response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { pDialog.dismiss(); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String,String> params = new Hashtable<String, String>(); params.put("test", "ok"); return params; } }; AppController.getInstance().addToRequestQueue(stringRequest);

$keyword=  @$_POST["test"];
if($keyword=="ok")
{
echo'
[  
   {  
      "name":"name 1 ",
      "img":"1.jpg",
      "info":"hello",
      "id":"eee"
   },
   {  
      "name":"name 2",
      "img":"2.jpg",
      "info":"hello",
      "id":"222"
   }
]
';
}
服务器PHP文件中的

from datetime import *
datetime.datetime.fromtimestamp

但是服务器不会为应用程序发送任何内容

我通过StringRequest测试它工作正常,但在JsonArrayRequest中它不起作用

当我使用JsonArrayRequest时,它似乎没有设置参数

请帮助

3 个答案:

答案 0 :(得分:1)

如果你的项目使用了mcxiaoke的库,你会发现里面的JsonArrayRequest.java文件中有一个构造函数,如下所示

public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
                        Listener<JSONArray> listener, ErrorListener errorListener) {
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
            errorListener);
}

将此用于您的请求。

如果您的应用使用Google的排球库(而不是JAR文件),则需要将该构造函数添加到JsonArrayRequest.java文件中,或者您可以尝试使用getBody()代替getParams()。< / p>

更新:使用以下示例

...
JSONObject requestBody = new JSONObject();
try {
    requestBody.put("key1", "value1");
    requestBody.put("key2", "value2");  
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, url, requestBody, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            // do something
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // do something
        }
    };
    // Executes request
    requestQueue.add(request);
} catch (JSONException e) {
    // do something
}
...

答案 1 :(得分:1)

为什么你不使用StringRequest

如果您的回复是JsonArrayJsonObject,您也可以从StringResponse获得回复。

String response;

JSONArray arrayResponse = new JSONArray(response);

答案 2 :(得分:0)

您可以按照以下链接与您的问题非常相似。

Why is Volley's onResponse not called