任何人都可以在此代码中看到任何错误吗?我已经检查过以确保数据已写入数据库。每次我点击按钮,它都会给我"不正确的密码"文本。我可能会忽略一些愚蠢的事情。任何帮助表示赞赏。
public void buttonWork() {
button_credCheck.setOnClickListener(new View.OnClickListener() {
String rpq = regPwdQuery().toString();
String passInputStr = editText_pwdInput.getText().toString();
@Override
public void onClick(View v) {
if (passInputStr == rpq) {
Intent myIntent = new Intent(LogInActivity.this, FindInfoActivity.class);
startActivity(myIntent);
} else {
Toast.makeText(LogInActivity.this, "Incorrect Password", Toast.LENGTH_LONG).show();
}
}
});
}
编辑: 这不是引用问题的重复,因为将==更改为equals()并不能解决我的问题。
编辑2: 我想也许应该包含regPwdQuery的游标类
public Cursor regPwdQuery() {
String regPwdData = editText_pwdInput.getText().toString();
String regQuery = "SELECT * FROM UsrPass_table WHERE Pwrd ='" + regPwdData + "'";
SQLiteDatabase uDB = usrDB.getReadableDatabase();
Cursor result = uDB.rawQuery(regQuery, null);
return result;
答案 0 :(得分:2)
当我们必须比较String对象引用时,使用==
运算符。如果两个String变量指向内存中的同一个对象,则比较将返回true。
当我们需要比较String对象中存在的文本内容时,使用equals
方法。当两个String对象保持相同的内容(即相同的值)时,此方法返回true。
<强> To compare two strings for equality, use equals( ).
强>
public void buttonWork() {
button_credCheck.setOnClickListener(new View.OnClickListener() {
String rpq = regPwdQuery().toString();
String passInputStr = editText_pwdInput.getText().toString();
@Override
public void onClick(View v) {
if (passInputStr.equals(rpq))
Intent myIntent = new Intent(LogInActivity.this, FindInfoActivity.class);
startActivity(myIntent);
} else {
Toast.makeText(LogInActivity.this, "Incorrect Password", Toast.LENGTH_LONG).show();
}
}
});
}
答案 1 :(得分:1)
您无法将java中的Strings
与==
运算符进行比较。改为使用equals()
方法:
if (passInputStr.equals(rpq))
答案 2 :(得分:1)
这实际上意味着 passInputStr!= rpq ,您可以尝试 .equalsIgnoreCase() 方法或 .equals() 方法。那是因为你在比较字符串!您可以阅读有关此here
的更多信息答案 3 :(得分:1)
您的比较会检查引用而不是字符串的实际内容。而是使用.equals()来检查String的值。
editor#dragover
应改为:
if (passInputStr == rpq)
编辑:
您要查询从查询中获得的结果:
if(passInputStr.equals(rpq))
如果您的结果只包含可能有效的密码,但我不认为它会给出正确的结果。 由于我不知道UsrPass_table表是怎样的,我只能猜测,但我认为必须实现这样的事情:
String rpq = regPwdQuery().toString();
希望它有所帮助。
答案 4 :(得分:0)
试试
if (passInputStr.equals(rpq))
<强>参考强>:
What is the difference between == vs equals() in Java?
这是一个例子(你可以运行它):
public final class MyEqualityTest
{
public static void main( String args[] )
{
String s1 = new String( "Test" );
String s2 = new String( "Test" );
System.out.println( "\n1 - PRIMITIVES ");
System.out.println( s1 == s2 ); // false
System.out.println( s1.equals( s2 )); // true
A a1 = new A();
A a2 = new A();
System.out.println( "\n2 - OBJECT TYPES / STATIC VARIABLE" );
System.out.println( a1 == a2 ); // false
System.out.println( a1.s == a2.s ); // true
System.out.println( a1.s.equals( a2.s ) ); // true
B b1 = new B();
B b2 = new B();
System.out.println( "\n3 - OBJECT TYPES / NON-STATIC VARIABLE" );
System.out.println( b1 == b2 ); // false
System.out.println( b1.getS() == b2.getS() ); // false
System.out.println( b1.getS().equals( b2.getS() ) ); // true
}
}
final class A
{
// static
public static String s;
A()
{
this.s = new String( "aTest" );
}
}
final class B
{
private String s;
B()
{
this.s = new String( "aTest" );
}
public String getS()
{
return s;
}
}
答案 5 :(得分:0)
public void buttonWork() {
button_credCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String rpq = regPwdQuery().toString();
String passInputStr = editText_pwdInput.getText().toString();
if (passInputStr == rpq) {
Intent myIntent = new Intent(LogInActivity.this, FindInfoActivity.class);
startActivity(myIntent);
} else {
Toast.makeText(LogInActivity.this, "Incorrect Password", Toast.LENGTH_LONG).show();
}
}
});
}
试试这个..在onClick方法中放入rpq和passInputStr。如果条件if (passInputStr.equals(rpq))
答案 6 :(得分:0)
简单地说,替换:
if (passInputStr == rpq)
与
if (passInputStr.equals(rpq))
当您想要比较两个不同的字符串时,请使用string.equals(anotherString)方法。
修改强>
public String regPwdQuery() {
String regPwdData = editText_pwdInput.getText().toString();
String regQuery = "SELECT * FROM UsrPass_table WHERE Pwrd ='" + regPwdData + "'";
SQLiteDatabase uDB = usrDB.getReadableDatabase();
Cursor cursor = uDB.rawQuery(regQuery, null);
//Modify this
String result = cursor.getString(cursor.getColumnIndex("password"));
return result;