我有一个运行良好的登录代码,现在我需要包含一段代码片段,如果用户提供了无效的登录详细信息,该代码片段将向用户致敬。
请帮助我修改下面的代码(从互联网上的其他教程中找到),以便在用户提供无效登录详细信息时通知用户。
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();
//}
您不能使用
Name == ""
你必须使用
"".equals(Name)
用于比较两个String。
==运算符将比较地址值,并且"没有相同的Name地址,因此您永远无法显示您的toast
使用NAME.isEmpty()检查空字符串
您的问题出现在Android应用程序中。别担心,我以前也做过,所以你不是第一个做的;)
要验证该字段是否为空,需要使用name.isEmpty()
或name.equals("")
。请记住,Android是一个基于Java的程序,与.NET.不同
原因是从web服务返回的JSON repsonse是一个对象而不是字符串,因此它将忽略以下代码:name == ""
希望这有帮助:)