在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" />
为什么会这样?
答案 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")