Java 比较EditText中的文本与数据库中的字符串
这段代码应该比较输入到R.id.editUserName中的文本与R.string.DB_用户名,如果它们匹配,请登录,否则显示不匹配的toastJava 比较EditText中的文本与数据库中的字符串,java,android,Java,Android,这段代码应该比较输入到R.id.editUserName中的文本与R.string.DB_用户名,如果它们匹配,请登录,否则显示不匹配的toast public void signIn(View view) { EditText editUserName = (EditText)findViewById(R.id.editUserName); String userName = editUserName.getText().toString(); if ( userName ==
public void signIn(View view) {
EditText editUserName = (EditText)findViewById(R.id.editUserName);
String userName = editUserName.getText().toString();
if ( userName == getResources().getString(R.string.DB_username)) {
// log in
setContentView(R.layout.screen1);
} else {
// show toast
Toast toast = Toast.makeText(getApplicationContext(), userName+" != "+getResources().getString(R.string.DB_username), Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
即使他们真的匹配了,它仍然会显示祝酒词,比如罗杰!=罗杰。。。那怎么可能呢?不要那样比较它们。使用java提供的字符串比较函数来比较它们 请参阅:
我认为您需要查找Java equality是引用平等。使用字符串的equals方法,即
if ( userName.equals(getResources().getString(R.string.DB_username)))
明白了吗?您无法在Java中比较这样的字符串。你需要:
if (userName.equals(...))
您的代码所说的是,这两个东西在内存中是完全相同的对象吗?而不是这些对象的内容是否相同?当字符串本身是不同的对象时,它不匹配。你应该使用
if ( userName.equals(getResources().getString(R.string.DB_username)))
这将比较实际的字符串。谢谢,成功了!:奇怪的是,java不喜欢这种C风格的比较,却没有抛出任何错误。是的,这与java中如何看待字符串有关。它与C语言不同,但即使如此,在任何语言中使用字符串时,也应始终使用包装器方法,而不是直接比较。简单的问题“生命的意义是什么?”也是一个简单的问题。这是一个棘手的答案。或者换一种说法,除非你已经知道答案,否则你怎么知道这是一个简单的答案?