Я пытаюсь переключиться с внешнего входа в систему, в которой данные пользователей хранятся в облаке, на локальный вход в систему с помощью комнаты / sqlite в приложении android.
Нужна помощь, чтобы получить код для работа с МВВМ. Это дает мне ошибку нулевого указателя, которую я укажу в приведенных ниже фрагментах кода.
ROOM / DATABASE
public static final String DATABASE_NAME = "feelingFitDatabase";
/**
* Singleton instance of the database.
*/
private static FeelingFitDatabase instance;
/**
* Get MoodLogModel Access Object
* @return
*/
public abstract MoodBeforeDao getMoodBeforeDao();
public abstract CbtDao getCbtDao();
public abstract WorkoutLogsDao getWorkoutLogsDao();
public abstract UsersDao getUsersDao();
/**
* Creates an instance of the database.
* @param context
* @return
*/
public static synchronized FeelingFitDatabase getInstance(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(
context.getApplicationContext(),
FeelingFitDatabase.class,
DATABASE_NAME
).addMigrations(MIGRATION_20_22)
//.fallbackToDestructiveMigration()
.addCallback(roomCallBack)
.build();
}
return instance;
}
private static RoomDatabase.Callback roomCallBack = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
new PopulateDatabaseAsyncTask(instance).execute();
}
};
DAO
@Query("SELECT * FROM usersTable WHERE userName = :userName AND password = :password")
LiveData<UsersTable> verifyUserLogin(String userName, String password);
Хранилище
public LiveData<UsersTable> verifyUserLogin(){
return feelingFitDatabase.getUsersDao().verifyUserLogin(userName, password);
}
VIEWMODEL
public LiveData<UsersTable> verifyUserLogin(String userName, String password){
return verifyUserLogin;
}
ACTIVITY
//sets onclick listener to the login button.
btnLogin.setOnClickListener(new View.OnClickListener() {
/**
* @param v
*/
@Override
public void onClick(View v) {
// Checks if the username and password is valid.
if (!validateEmail() | !validatePassword()) {
return;
}
stringEmail = etEmail.getText().toString();
stringPassword = etPassword.getText().toString();
usersViewModel.verifyUserLogin(stringEmail, stringPassword).observe(LoginActivity.this, new Observer<UsersTable>() {
@Override
public void onChanged(UsersTable usersTable) {
if (usersTable.getUserName().equals(stringEmail) && usersTable.getPassword().equals(stringPassword)) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
}
});
}
});
}
Эта строка: @Override publi c void onChanged (UsersTable usersTable)
UsersTable в вышеприведенном методе наблюдателя отображается как ноль. Я не совсем уверен, правильно ли я подходил к тому, чтобы проверять введенные пользователем данные для входа в систему в соответствии с данными в базе данных? Любой совет или помощь с этим будет принята с благодарностью.