我的查询有什么问题?

时间:2015-08-19 13:09:33

标签: android sqlite button

任何人都可以在此代码中看到任何错误吗?我已经检查过以确保数据已写入数据库。每次我点击按钮,它都会给我"不正确的密码"文本。我可能会忽略一些愚蠢的事情。任何帮助表示赞赏。

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;

7 个答案:

答案 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;