Вероятно, вы получаете исключение с нулевым указателем, поскольку вы, похоже, не создали его экземпляр SchoolAppDB .
Я бы предложил изменить: -
setContentView(R.layout.activity_main);
быть: -
setContentView(R.layout.activity_main);
SchoolAppDB = new DBHelper(this); //<<<<<<<<<< assuming the DBHelper constructor only requires the Context.
Полагаю, вы хотите if (SchoolAppDB.checkUserLogin(username, password)) {
, а не if (SchoolAppDB.checkUser(username, password)) {
.
Дополнительный
Непосредственное размещение введенных пользователем данных в SQL делает приложение открытым для SQL-инъекция .
Проверка курсора на нулевое значение, когда курсор возвращается из метода SQliteDatabase, такого как rawQuery , бесполезен. Курсор никогда не будет нулевым, если не будет возвращено ни одной строки, он будет пустым.
Не рекомендуется размещать вызовы методов SQLiteDatabase в предложениях try / catch, поскольку серьезная проблема может быть скрыта.
- Существуют удобные методы для часто используемого SQL, которые облегчают жизнь, чем использование rawQuery и execSQL. Они создают базовый SQL, защиту от SQL-инъекций (rawQuery также делает, если вы используете 2-й параметр, чтобы предоставить String [] аргументов для замены ? placehoders).
В качестве такового предлагается рассмотреть следующий метод checkUserLogin , который использует удобный метод query : -
public boolean checkUserLogin(String username,String password){
SQLiteDatabase db=this.getWritableDatabase();
String whereclause = "USER_NAME=? and USER_PASSWORD=?"; //<<<<<<<<<< ?'s will be replaced according to whereargs on a 1 by 1 basis
String[] whereargs = new String[]{username,password};
Cursor cursor = db.query(
"USER",
new String[]{"USER_NAME","USER_PASSWORD"},
whereclause,
whereargs,
null,null,null
);
int count = cursor.getCount();
cursor.close();
return count > 0;
}