java.lang.IllegalArgumentException: the bind value at index 2 is null
говорит вам, что пароль равен null и поэтому не может использоваться для замены ( bind ) ? в запросе.
Вам нужно либо убедиться, что пароль никогда не будет нулевым, когда он получен, либо обработать его как нулевое.
Правильное исправление должно быть первым (код для получения пароля не указан, поэтому данное исправление не может быть предоставлено) . Тем не менее, следующее (обработайте его как ноль) может обойти основную проблему: -
public Cursor checkduplicates_in_user_credentials(String user_name, String password, String table) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = null;
if (password == null) password = "apassswordthatwouldneverbeusedbytheuser";
if (table.equals(TABLE_NAME_USER)) {
res = db.rawQuery("select * from " + TABLE_NAME_USER + " where username=? and password=? ", new String[]{user_name, password},null);
}
return res;
}
Однако, может все еще иметь проблему, поскольку вызывающий код не обрабатывает нулевой Курсор, который может произойти, если таблица неравно TABLE_NAME_USER.
Итак, у вас должно быть что-то вроде: -
Cursor y = db.checkduplicates_in_user_credentials(username, password, getResources().getString(R.string.user_credentials));
if (y != null && y.moveToFirst()) { // will not try to moveToFirst if the Cursor is null
String name1 = y.getString(y.getColumnIndex("first_name"));
String name2 = y.getString(y.getColumnIndex("last_name"));
name.setText(name1+" "+name2);
age.setText(y.getString(y.getColumnIndex("age")));
email.setText(y.getString(y.getColumnIndex("e_mail")));
pwd.setText(y.getString(y.getColumnIndex("password")));
usrname.setText(y.getString(y.getColumnIndex("username")));
phoneno.setText(y.getString(y.getColumnIndex("phone_number")));
bloodgroup.setText(y.getString(y.getColumnIndex("blood_group")));
gender.setText(y.getString(y.getColumnIndex("gender")));
city.setText(y.getString(y.getColumnIndex("city")));
utype.setText(y.getString(y.getColumnIndex("user_type")));
}
Теперь, когда вы обрабатываете нулевой Курсор, вместо того, чтобы иметь потенциальный непреднамеренный доступ, если пароль действительно будет apasssword, который никогда не будет использован пользователем , тогда вы можете вместо этого использовать: -
public Cursor checkduplicates_in_user_credentials(String user_name, String password, String table) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = null;
if (password == null) return null;
if (table.equals(TABLE_NAME_USER)) {
res = db.rawQuery("select * from " + TABLE_NAME_USER + " where username=? and password=? ", new String[]{user_name, password},null);
}
return res;
}