【问题标题】:Params not sent from android to node.js using Volley未使用 Volley 从 android 发送到 node.js 的参数
【发布时间】:2017-01-15 14:10:26
【问题描述】:

我正在创建一个应用程序,它使用一些 node.js 脚本来编写服务器脚本,主要是因为 node.js 支持 Firebase,但由于某种原因,我无法通过我的请求发送任何参数(GET 和 POST)。

我的android代码如下

private void sendData(final String name){
    StringRequest sr = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Toast.makeText(getApplicationContext(),response.toString()+" returned from node.js server",Toast.LENGTH_SHORT).show();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(),error.toString()+"The Server returned error",Toast.LENGTH_SHORT).show();

        }
    }){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String,String> map = new HashMap<>();
            map.put("test",name);
            return map;
        }
    };
    RequestQueue r = Volley.newRequestQueue(getApplicationContext());
    r.add(sr);
}

对应的node.js脚本如下

app.get('/hello', function(request, response){
  var outputJson = request.params.test;
  response.send(JSON.stringify(outputJson));
  console.log(outputJson);
})

出于某种原因,控制台总是记录 undefined。根据this post 的建议,我还尝试在请求正文中包含数据,并通过request.body.test 从node.js 中的请求中获取数据。

我想知道出了什么问题,最重要的是我还想知道如何接收和处理POST 请求。我在一些博客上读到我必须实现某种middleware。对此领域的一些澄清也将不胜感激。

【问题讨论】:

  • 你试过/hello/:test 吗?
  • sfbpush.herokuapp.com/hello/:test=xxx。我在调试器中使用了它,它仍然没有返回任何东西
  • 尝试使用request.param('test') 获取参数怎么样?但在此之前,请尝试在您的路线中使用hello/:test
  • sfbpush.herokuapp.com/hello?test=xxxrequest.param('test) 一起使用,但是当我从 android 调用它时它不起作用。我用 REST 调试器测试了它
  • 不,我也尝试添加路线,但仍然无法正常工作

标签: javascript android node.js express


【解决方案1】:

我查看了您的代码,发现Android 代码存在一些缺陷。

  1. HashMap 是在 getHeaders() 函数中定义的,但实际上应该像这样在 getParams() 中定义

     @Override
                public Map<String, String> getParams() throws AuthFailureError {
                    HashMap<String,String> map = new HashMap<>();
                    map.put("test",name);
                    return map;
                }
    
  2. 不要尝试通过request.params 检索数据,而是尝试使用request.body

【讨论】:

  • 通过在节点中执行 request.body,如果是这种情况,他需要覆盖他的 android 代码中的 getBody(),因为如果不是这样,那将抛出一个未定义的对象属性,request.params 将我相信就够了
  • 我也想过。如果帖子不被接受,那将是我的第二个猜测。但显然它得到了解决
  • 这个答案还没有被接受,无论如何,你的答案还是有帮助的。 :)
  • 糟糕。我的声誉发生了变化,并认为这是由于这个问题。感谢您提请我注意。
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
相关资源
最近更新 更多