当前位置: 首页 > 面试题库 >

Volley JsonObjectRequest Post参数不再起作用

韩祯
2023-03-14
问题内容

我正在尝试在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

/
创建一个新请求。
* @param方法HTTP方法,用于使用
* @param URL URL从
* @param jsonRequest 获取JSON,并在其中发布一个{@link JSONObject}。允许为Null,并且
表示不随请求一起发布任何参数。

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


问题答案:

我最终改用了Volley的StringRequest,因为我花了太多宝贵的时间试图使JsonObjectRequest正常工作。

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

StringRequest strRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>()
                {
                    @Override
                    public void onResponse(String response)
                    {
                        Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
        {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", "test");
                return params;
            }
        };

queue.add(strRequest);

这对我有用。它与JsonObjectRequest一样简单,但是使用String代替。



 类似资料:
  • 问题内容: 有谁知道为什么这不起作用? 这确实有效: 问题答案: 调用中的第二个参数是一个配置对象。您想要这样的东西: 有关更多详细信息,请参见http://docs.angularjs.org/api/ng.$http的“ 参数” 部分。

  • 我创建了将数据传递给spring rest的代码,但这些代码不能正常工作请参见下面的代码: 我的javascrit有:

  • 我正在尝试使用Chrome扩展Postman测试一个简单的PHP页面。当我发送URL参数时,脚本运行良好(例如变量在参数中可用)。当我将它们作为参数发送时,参数仅包含。 剧本: 我错过了什么?

  • 问题内容: 我正在Linux Ubuntu Natty Narwhal中运行带有Tomcat 7.0.12的Eclipse Helios Service Release 1。 我一直很高兴地重新部署我的Web应用程序,直到它毫无理由地停止工作为止。显示以下异常: 在“ 服务器” 选项卡中,“本地主机上的Tomcat v7.0服务器[已启动,已同步] 我的项目显示为Tomcat v7.0 Serve

  • 问题内容: 我正在运行用于Firefox的Selenium Webdriver(最新版本)。每次开始测试时,我都会从Windows本身收到一条错误消息,指出Firefox崩溃了。当我按下“强制关闭”按钮时,测试将按原样开始。 我是Eclipse和Selenium的新手,但是在调试器模式下,我没有找到有问题的代码(这么多线程同时运行)。.并没有尝试查找Windows日志,但是也许有些人知道解决方案我

  • 问题内容: 到目前为止,我使用的是2.45.0版本的selenium,所有等待都以这种方式完成: 但是我将selenium更新为3.1.0,但出现错误: “类型FluentWait中的直到(Predicate)方法不适用于参数(ExpectedCondition)” 我看到从2.45.0到3.1.0不再支持某些功能。我正在尝试研究什么是现在最好的方法,但是我不确定。我在Google上找到的大多数内