[英]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.