android中的简单用户名密码不起作用

时间:2017-07-04 08:08:52

标签: android login passwords string-comparison username

在android studio中我制作一个简单的用户名和密码代码,如果用户名和密码编辑文本视图中的值都是特定值(" cake"和#34;机器人"例如)但是当我测试它并输入正确的用户名和密码值时,我被告知我输入了错误的匹配?

这是主要活动

public class MainActivity extends AppCompatActivity {

EditText usernameET;
EditText passwordET;
Button SignIn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    usernameET = (EditText) findViewById(R.id.username);
    passwordET = (EditText) findViewById(R.id.password);
    SignIn = (Button) findViewById(R.id.signin);
}

public void SignIn(View view) {

    String username = usernameET.getText().toString();
    String password = passwordET.getText().toString();

    if(username == "cake" && password == "robot"){
        Toast.makeText(this, "You Signed In", Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this, "Invalid Login", Toast.LENGTH_SHORT).show();
    }
}

}

主要活动布局:

 <EditText
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/password"
    android:layout_alignStart="@+id/password"
    android:layout_marginBottom="15dp"
    android:hint="@string/username"
    android:inputType="text" />

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"

    android:hint="@string/password"
    android:inputType="text" />

<Button
    android:id="@+id/signin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/sign_in"
    android:onClick="SignIn"
    android:layout_below="@+id/password"
    android:layout_centerHorizontal="true" />

enter image description here

为什么会这样?

6 个答案:

答案 0 :(得分:1)

String username = usernameET.getText().toString();
String password = passwordET.getText().toString();

“==”匹配字符串的引用ID。所以,String用户名是堆中的一个对象,其reference_id将不同于String“cake”  而String类的.eqauls()方法比较字符串的内容。所以,在你的情况下使用

if(username.equals("cake") && password.equals("robot")){
   Toast.makeText(this, "You Signed In",Toast.LENGTH_SHORT).show();
}else{
   Toast.makeText(this, "Invalid Login", Toast.LENGTH_SHORT).show();
}

以获取更多参考 http://www.studytonight.com/java/string-handling-in-java.php

答案 1 :(得分:0)

Reeplace username == "cake" && password == "robot"username.equals("cake") && password.equals("robot")

答案 2 :(得分:0)

我认为你必须写

username.equals(&#34; cake&#34;)&amp;&amp; password.equals(&#34;机器人&#34)

原因是您必须检查edittext的内容而不是参考

当你使用==它检查内存中的引用,而你必须检查数据。

答案 3 :(得分:0)

您正在比较字符串..所以您需要使用 .equals

public void SignIn(View view) {

    String username = usernameET.getText().toString();
    String password = passwordET.getText().toString();

    if(username.equals("cake") && password.equals("robot")){
        Toast.makeText(this, "You Signed In", Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this, "Invalid Login", Toast.LENGTH_SHORT).show();
    }
}

答案 4 :(得分:0)

在java中,a == b用于比较2个引用,而不是对象本身。

因此,如果您要比较2个字符串,请在String上使用equals()方法。例如, username.equals(&#34; cake&#34;)&amp;&amp; password.equals(&#34;机器人&#34)

答案 5 :(得分:0)

更改您的if条件,如

 if(username.equalsIgnoreCase("cake") && password.equalsIgnoreCase("robot")