Я хочу создать экран входа в систему android, используя Room / SQLLite. Как только мое действие по входу в систему запущено, в базу данных будет вставлен объект пользователя.
При нажатии на кнопку входа в систему я хочу найти пользователя по имени пользователя, которое я заполнил. Затем я проверю, если пароль, который я дал, является правильным паролем. Исходя из этого, я перейду к другой операции go или покажу сообщение об ошибке.
Но это не так, следующий код всегда возвращает NULL, поэтому я всегда получаю сообщение об ошибке.
UserWithWorkorders userWithWorkorders = ie4ViewModel.getUserWithWorkorders(username.getText().toString()).getValue();
Вот запрос в UserDao. Как вы видите, он возвращает LiveDate.
@Query("SELECT * FROM User WHERE username =:username")
LiveData<UserWithWorkorders> getUserWithWorkorders(String username);
Вот onCreate () моей активности при входе в систему:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
IE4ViewModel ie4ViewModel = new ViewModelProvider(this).get(IE4ViewModel.class);
User user = new User("John", "Doe", "john", "doe");
ie4ViewModel.insertUser(user);
final Button loginButton = findViewById(R.id.loginButton);
final EditText username = findViewById(R.id.username);
final EditText password = findViewById(R.id.password);
final TextView errorMessage = findViewById(R.id.errorMessage);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserWithWorkorders userWithWorkorders = ie4ViewModel.getUserWithWorkorders(username.getText().toString()).getValue();
if (userWithWorkorders != null) {
if(userWithWorkorders.user.getPassword().equals(password.getText().toString())){
Intent i = new Intent(LoginActivity.this, WorkordersActivity.class);
i.putExtra("userObject", userWithWorkorders);
startActivity(i);
}
else {
errorMessage.setVisibility(View.VISIBLE);
}
}
else {
errorMessage.setVisibility(View.VISIBLE);
}
}
});
ie4ViewModel.getUsersWithWorkorders().observe(this, new Observer<List<UserWithWorkorders>>() {
@Override
public void onChanged(List<UserWithWorkorders> usersWithWorkorders) {
if (usersWithWorkorders != null && usersWithWorkorders.size() > 0) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
}
});
}
}
});
}
Что я делаю неправильно? Если есть какой-либо другой код, который вы хотели бы увидеть, пожалуйста, дайте мне знать. Или другими словами: как получить объект в моей активности android из базы данных SQLLite, используя Room, если запрос Dao возвращает объект LiveData?