簡體   English   中英

使用Node.js時Android-Volley發布錯誤

[英]Android-volley post error when working with Node.js

我知道這個問題可能已被問過多次,但沒有一種解決方案適合我。 在我的android volley帖子請求中,我傳遞用戶名和密碼,但是每次單擊登錄時,即使憑據正確且與郵遞員都很好,它也總是說“用戶名和密碼無效”。 這是我的代碼如下:

登錄Node.js

router.post('/login', function(req,res,next){
  var user = {
    username: req.body.username,
    password: req.body.password
  };

  connection.query("SELECT id, fullname, username, email_address, createdAt FROM users WHERE username=?  OR email_address=? AND password=? LIMIT 1",[user.username, user.username, user.password], function(err, rows, field){
      if(err) throw err;
      if(rows.length > 0){
        res.json({
            success: '1',
            message: 'Login Successful',
            id: rows[0],
            fullname: rows[1],
            username: rows[2],
            email: rows[3],
            createdAt: rows[4]
        });
      }else{
        res.json({
            success: '0',
            message: 'Invalid username or password'
        });
      }
  });
});

在客戶端登錄(Android):

private void login(final String uname, final String upass) {
    //192.168.1.101:5000/api/users/1
   final String url = "http://192.168.1.100:5000/api/users/login";
   RequestQueue queue = Volley.newRequestQueue(getActivity());

    JsonObjectRequest rq = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
              if(response.getString("success") != null) {
                final int success = Integer.parseInt(response.getString("success"));
                    if (success == 1) {
                        JSONObject uid = response.getJSONObject("id");
                        int id = uid.getInt("id");
                        String fullname = uid.getString("fullname");
                        String username = uid.getString("username");
                        String email = uid.getString("email");
                        String createdAt = uid.getString("createdAt");
                        SuperToast successToast = new SuperToast(getActivity(), Style.getStyle(Style.BLUE, SuperToast.Animations.FLYIN));
                        //successToast.setText(id + " " + fullname + " " + username + " " + email + " " + createdAt);
                        successToast.setText(response.getString("message"));
                        successToast.setDuration(SuperToast.Duration.LONG);
                        successToast.setGravity(Gravity.CENTER, 0, 0);
                        successToast.show();
                    } else if (success == 0) {
                        SuperToast errorToast = new SuperToast(getActivity(), Style.getStyle(Style.BLUE, SuperToast.Animations.FLYIN));
                        errorToast.setText(response.getString("message"));
                        errorToast.setDuration(SuperToast.Duration.MEDIUM);
                        errorToast.setGravity(Gravity.CENTER, 0, 0);
                        errorToast.show();
                    } else {
                        SuperToast errorToast = new SuperToast(getActivity(), Style.getStyle(Style.BLUE, SuperToast.Animations.FLYIN));
                        errorToast.setText("Invalid Request");
                        errorToast.setDuration(SuperToast.Duration.MEDIUM);
                        errorToast.setGravity(Gravity.CENTER, 0, 0);
                        errorToast.show();
                    }
                }
            } catch (JSONException ex) {
                ex.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            SuperToast.create(getActivity(), error.getMessage(), SuperToast.Duration.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");
            return headers;
        }

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("username", uname);
            params.put("password", upass);
            return params;
        }
    };
    //MySingleton.getInctance(getActivity().getApplicationContext()).addToRequestQueue(rq);
    queue.add(rq);
}

任何幫助將不勝感激,在此先感謝您。

您沒有在請求正文上發送用戶名和密碼:

JsonObjectRequest rq = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {

創建主體並根據要求設置:

JSONObject body = new JSONObject();
body.put("username", uname);
body.put("password", upass);

JsonObjectRequest rq = new JsonObjectRequest(Request.Method.POST, url, body, new Response.Listener<JSONObject>() {

我已經修復了它,原來是電子郵件響應為null,並引發異常,感謝Tiago Ribeiro,代碼終於可以正常工作了,這是更新的代碼

Login.js:

    router.post('/login', function(req,res,next){
    function encrypt(text){
        var cipher =  crypto.createHash('sha1')
            .update(text)
            .digest('hex');
        return cipher;
    }
    var uPassword = encrypt(req.body.password.toString());
  var user = {
    username: req.body.username,
    password: uPassword
  };

  connection.query("SELECT id, fullname, username, email_address, createdAt FROM users WHERE (username=? OR email_address=?) AND password=? LIMIT 1",[user.username, user.username, user.password], function(err, rows, field){
      if(err) throw err;
      if(rows.length > 0){
        res.json({
            success: 1,
            message: 'Login Successful',
            id: rows[0],
            fullname: rows[1],
            username: rows[2],
            email_address: rows[3],
            createdAt: rows[4]
        });
      }else{
        res.json({
            success: 0,
            message: 'Invalid username or password'
        });
      }
  });
});

Android登錄:

    private void login(final String uname, final String upass) {
        //192.168.1.101:5000/api/users/1
       final String url = "http://192.168.1.100:5000/api/users/login";
       RequestQueue queue = Volley.newRequestQueue(getActivity());
        JSONObject params = new JSONObject();
        try {
            params.put("username", uname);
            params.put("password", upass);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        JsonObjectRequest rq = new JsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    final int success = response.getInt("success");
                      Log.d("Response", String.valueOf(success));
                        if (success == 1) {
                            JSONObject uid = response.getJSONObject("id");
                            int id = uid.getInt("id");
                            String fullname = uid.getString("fullname");
                            String username = uid.getString("username");
                            String email = uid.getString("email_address");
                            String createdAt = uid.getString("createdAt");
                            SuperToast successToast = new SuperToast(getActivity(), Style.getStyle(Style.BLUE, SuperToast.Animations.FLYIN));
                            successToast.setText(id + " " + fullname + " " + username + " " + email + " " + createdAt);
                           // successToast.setText(response.getString("message"));
                            successToast.setDuration(SuperToast.Duration.LONG);
                            successToast.setGravity(Gravity.CENTER, 0, 0);
                            successToast.show();
                        } else if (success == 0) {
                            SuperToast errorToast = new SuperToast(getActivity(), Style.getStyle(Style.BLUE, SuperToast.Animations.FLYIN));
                            errorToast.setText(response.getString("message"));
                            errorToast.setDuration(SuperToast.Duration.MEDIUM);
                            errorToast.setGravity(Gravity.CENTER, 0, 0);
                            errorToast.show();
                            Log.d("Response", response.toString());
                        } else {
                            SuperToast errorToast = new SuperToast(getActivity(), Style.getStyle(Style.BLUE, SuperToast.Animations.FLYIN));
                            errorToast.setText("Invalid Request");
                            errorToast.setDuration(SuperToast.Duration.MEDIUM);
                            errorToast.setGravity(Gravity.CENTER, 0, 0);
                            errorToast.show();
                        }
                } catch (JSONException ex) {
                    ex.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                SuperToast.create(getActivity(), error.getMessage(), SuperToast.Duration.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");
                return headers;
            }
/*
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("username", uname);
                params.put("password", upass);
                return params;
            }*/
        };
        //MySingleton.getInctance(getActivity().getApplicationContext()).addToRequestQueue(rq);
        queue.add(rq);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM