我正在尝试在Volley JsonObjectRequest中发送POST参数。最初,通过遵循官方代码所说的在JsonObjectRequest的构造函数中传递包含参数的JSONObject来对我来说是。突然,它停止了工作,并且我没有对以前工作的代码进行任何更改。服务器不再识别出正在发送任何POST参数。这是我的代码:

RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://myserveraddress";

// POST parameters
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "test");

JSONObject jsonObj = new JSONObject(params);

// Request a json response from the provided URL
JsonObjectRequest jsonObjRequest = new JsonObjectRequest
        (Request.Method.POST, url, jsonObj, new Response.Listener<JSONObject>()
        {
            @Override
            public void onResponse(JSONObject response)
            {
                Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();
            }
        },
        new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
            }
        });

// Add the request to the RequestQueue.
queue.add(jsonObjRequest);

这是服务器上的简单测试器PHP代码:
$response = array("tag" => $_POST["tag"]);
echo json_encode($response);

我得到的响应是{"tag":null}昨天,它运作良好,并以{"tag":"test"}回应
我没有改变任何事情,但是今天它不再起作用了。

在Volley源代码构造函数javadoc中,它说您可以在构造函数中传递JSONObject来在“@param jsonRequest”处发送发布参数:
https://android.googlesource.com/platform/frameworks/volley/+/master/src/main/java/com/android/volley/toolbox/JsonObjectRequest.java



我读过其他有类似问题的帖子,但解决方案对我不起作用:

Volley JsonObjectRequest Post request not working

Volley Post JsonObjectRequest ignoring parameters while using getHeader and getParams

Volley not sending a post request with parameters.

我尝试将JsonObjectRequest构造函数中的JSONObject设置为null,然后覆盖并设置“getParams()”,“getBody()”和“getPostParams()”方法中的参数,但是这些覆盖均不适用于我。另一个建议是使用一个附加的帮助程序类,该类基本上创建一个自定义请求,但是对于我的需求而言,此修复太复杂了。如果可以解决问题,我将尽一切努力使其正常工作,但是我希望有一个简单的原因可以说明为什么我的代码使工作,然后只是停止了,这也是一个简单的解决方案。

最佳答案

您只需要从HashMap参数中创建一个JSONObject即可:

String url = "https://www.youraddress.com/";

Map<String, String> params = new HashMap();
params.put("first_param", 1);
params.put("second_param", 2);

JSONObject parameters = new JSONObject(params);

JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, parameters, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        //TODO: handle success
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        error.printStackTrace();
        //TODO: handle failure
    }
});

Volley.newRequestQueue(this).add(jsonRequest);

关于android - Volley JsonObjectRequest Post参数不再起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29442977/

10-12 03:20