【问题标题】:Nodejs req.body shows empty from Android VolleyNodejs req.body 在 Android Volley 中显示为空
【发布时间】:2017-06-08 13:48:12
【问题描述】:

安卓代码:

private void registerUser(){
        final String username = "subrata";
        final String password = "banerjee";
        final String email = "test_email";

        StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(LoginActivity.this,response,Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(LoginActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                params.put(KEY_USERNAME,username);
                params.put(KEY_PASSWORD,password);
                params.put(KEY_EMAIL, email);
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

我正在尝试使用 Android Volleyhttp 请求发送到我的 node.js 服务器 (expressjs)。它访问服务器并获得响应,但是当我在 node.js 中打印req.body 时,它显示{}(空)。我是Android新手,无法弄清楚原因。请有人指导我。

【问题讨论】:

  • Toast 在 OnResponse 方法中显示什么?
  • 它显示响应 json。它是正确的。
  • @MayankBhatnagar 问题出在 Android Volley 请求上。 google了一下,发现跟charset有关系,但是真的不知道怎么实现。
  • 那你必须使用Json对象解析Json,查看我的回答我会为你贴一个demo方法。

标签: android android-volley


【解决方案1】:

在 OnResponse 中调用此方法GetResponse(response); 方法将是

private void GetResponse(String res){
    JSONObject jsonObject = null;

    try {
        jsonObject = new JSONObject(res);
        JSONArray result = jsonObject.getJSONArray("result");

        for (int i = 0; i < result.length(); i++) {
            JSONObject jo = result.getJSONObject(i);
            String temp = jo.getString("what_ever");
            String temp1 = jo.getString("what_ever_1");
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

这将为您提供从 json 获取的字符串格式的响应。

【讨论】:

    【解决方案2】:
    private void registerUser(){
           JSONObject jsonBodyObj = new JSONObject();
            try{
                jsonBodyObj.put("mAtt", "+1");
                jsonBodyObj.put("mDatum","+2");
                jsonBodyObj.put("mRID","+3");
                jsonBodyObj.put("mVon","+4");
            }catch (JSONException e){
                e.printStackTrace();
            }
            final String requestBody = jsonBodyObj.toString();
    
            StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Toast.makeText(LoginActivity.this,response,Toast.LENGTH_LONG).show();
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(LoginActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                        }
                    }){
                @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() {
                    try {
                        return requestBody == null ? null : requestBody.getBytes("utf-8");
                    } catch (UnsupportedEncodingException uee) {
                        VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
                                requestBody, "utf-8");
                        return null;
                    }
                }
    
            };
    
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        }
    

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多