我有一个正常工作的登录代码,现在我需要包含一段代码片段,如果用户提供无效的登录详细信息,他们会为用户致敬。
请帮我修改下面的代码(从互联网上的其他教程中找到),以便它可以告知用户是否提供了无效的登录详细信息。
protected void onPostExecute(String s) {
String err=null;
try {
JSONObject root = new JSONObject(s);
JSONObject user_data = root.getJSONObject("user_data");
NAME = user_data.getString("name");
PASSWORD = user_data.getString("password");
EMAIL = user_data.getString("email");
if(NAME == ""){
Toast.makeText(getApplicationContext(),
"Invlaid Login Details", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
err = "Exception: "+e.getMessage();
}
Intent i = new Intent(ctx, Home.class);
i.putExtra("name", NAME);
i.putExtra("password", PASSWORD);
i.putExtra("email", EMAIL);
i.putExtra("err", err);
startActivity(i);
}
这是我的用于登录的php文件
require 'connection.php';
try{
$username = filter_input(INPUT_POST, 'name');
$pssword = filter_input(INPUT_POST, 'password');
if($username == "" )
{
$results = "Invalid Entry";
echo json_encode(array("user_data"=>$results));
}
else
{
$stmt = $db->prepare('SELECT * '
. 'FROM users1 '
. 'WHERE name = :uname AND password = :password ');
$stmt->bindParam(':uname', $username);
$stmt->bindParam(':password', $pssword);
$stmt->execute();
$results = $stmt->fetch(PDO::FETCH_ASSOC);
if($results > 0 ){
$response = array();
echo json_encode(array("user_data"=>$results));
} else{
$results = "No Record Found";
$results["success"] = 0;
$results["message"] = "No Record Found";
die(json_encode($results));
}
}
}catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$stmt = NULL;
$results = NULL;
exit();
//}
答案 0 :(得分:0)
你不能使用
Name == ""
你必须使用
"".equals(Name)
用于比较两个String。
==运算符将比较地址值,“”没有相同的Name地址,因此您永远不会显示您的吐司
答案 1 :(得分:0)
使用NAME.isEmpty()检查空字符串
答案 2 :(得分:0)
您的问题出在Android应用程序中。别担心我在你之前做过这件事,所以你不是第一个这样做的人;)
要验证该字段是否为空,您需要使用name.isEmpty()
或name.equals("")
。请记住,Android是一个基于Java的程序,不像.NET。
原因是因为从Web服务返回的JSON repsonse是一个对象而不是字符串,因此它将忽略此代码:name == ""
希望这会有所帮助:)