1

Good day, I always used getString() and getInt() in getting results. I'm doing a simple searching and I want to get a boolean result if it is found.

Here's my sample code: ForgotPassword.java

 @Override
public void onClick(View v) {

    String strUserForget = edtForgotPassword.getText().toString().trim();

    switch (v.getId()){
        case R.id.buttonSubmit:

            if (strUserForget.matches("")){
                Toast.makeText(ForgotPasswordActivity.this, "Please Provide Complete Info", Toast.LENGTH_LONG).show();
            }else {
                //String forgetPassProject = "";
                Cursor cursor = (registerDatabase.getSingleRecordForgetPass(strUserForget));
                boolean value = (cursor.getInt(registerDatabase.ID) == 1);

                Toast.makeText(ForgotPasswordActivity.this, "Your password is: " , Toast.LENGTH_LONG).show();
            }
            break;

        case R.id.buttonGoBackWelcome:
            startActivity( new Intent(getApplicationContext(),WelcomeActivity.class));
            finish();
            break;
    }

}

And for registerSQLDatabase.java

public Cursor getSingleRecordForgetPass(String username){

    String querySingleRecord = "SELECT * FROM " + DB_TABLE + "WHERE = " +FULL_NAME+ "LIKE" +username ;
    return  sqLiteDatabase.rawQuery(querySingleRecord,null);
}

The boolean value = (cursor.getInt(registerDatabase.ID) > 0); is incompatible.

RoCkDevstack
  • 3,517
  • 7
  • 34
  • 56

1 Answers1

1

boolean value = (cursor.getInt(registerDatabase.ID) == 1); thows a NPE because it has no results, to avoid this Exception use Objects.equals and check number of results of the Cursor:

if (!Objects.equals(cursor, null) && cursor.getCount() > 0) {
    // has results
} else {
    // has NO results
}

Prior java 1.7:

if (cursor != null && cursor.getCount() > 0) {
    // has results
} else {
    // has NO results
}

As a side problem, as Rohit5k2 pointed there is an unnecessary = in your query:

String querySingleRecord = 
    "SELECT * FROM " + DB_TABLE + " WHERE " + FULL_NAME + " LIKE " + username ;

If you don't need Cursor information, just create a method that returns a boolean:

public boolean existsUser(String username)
{
    String querySingleRecord = "SELECT * FROM " + DB_TABLE + "WHERE " +FULL_NAME+ "LIKE" +username ;
    Cursor cursor = sqLiteDatabase.rawQuery(querySingleRecord,null);

    // now you have the results, DON'T return them, just check if contains
    // > Java 7: if (!Objects.equals(cursor, null) && cursor.getCount() > 0) {
    if (cursor != null && cursor.getCount() > 0) {
        return true;
    }

    return false;
}

And use it in this way:

if (strUserForget.matches("")){
    Toast.makeText(ForgotPasswordActivity.this, "Username cannot be empty.", Toast.LENGTH_LONG).show();
} else if (registerDatabase.existsUser(strUserForget)) {
    Toast.makeText(ForgotPasswordActivity.this, "Your password is: " , Toast.LENGTH_LONG).show();
} else {
    Toast.makeText(ForgotPasswordActivity.this, "User does not exists" , Toast.LENGTH_LONG).show();
}
Community
  • 1
  • 1
Jordi Castilla
  • 26,609
  • 8
  • 70
  • 109