JSON在android中通知无效的登录详细信息

时间:2016-04-04 05:37:20

标签: php android json

我有一个正常工作的登录代码,现在我需要包含一段代码片段,如果用户提供无效的登录详细信息,他们会为用户致敬。

请帮我修改下面的代码(从互联网上的其他教程中找到),以便它可以告知用户是否提供了无效的登录详细信息。

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();
//}

3 个答案:

答案 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 == ""

希望这会有所帮助:)