Я следую архитектуре приложения ViewModel для Android и столкнулся с проблемой при извлечении некоторых простых данных из базы данных SQLite. Вот упрощенная версия моего DAO и моего репо:
ДАО:
@Dao
public interface UserStuffDao {
@Query("SELECT * from UserStuff")
List < UserStuff > getAllUsers();
@Query("SELECT path_to_user_profile_pic from UserStuff where id=:id")
LiveData < String > getPathToUserProfilePic(Long id);
}
РЕПО:
public class UserStuffRepository {
private static UserStuffRepository instance;
private static UserStuffDao userStuffDao;
public static final String TAG = UserStuffRepository.class.getSimpleName();
public static UserStuffRepository getInstance(Application application) {
Log.d(TAG, "[getInstance] called");
if (instance == null) {
instance = new UserStuffRepository();
Database db = Database.getDatabase(application.getApplicationContext());
userStuffDao = db.userStuffDao();
}
return instance;
}
public MutableLiveData < UserStuff > getUserStuff(Long id) {
final MutableLiveData < UserStuff > userData =
new MutableLiveData < > ();
LiveData < String > info = userStuffDao.getPathToUserProfilePic(id);
Log.d(TAG, "[getuserStuff] the dao returned ---> " + info.getValue());
UserStuff to_return = new UserStuff(id, info.getValue());
userData.setValue(to_return);
return userData;
}
public void geteverything() {
new AsyncTask < Void, Void, Void > () {
@Override
protected Void doInBackground(Void...voids) {
Log.d(TAG, " EVERYTHING IN THE DATABASE " + userStuffDao.getAllUsers());
return null;
}
}.execute();
}
}
Проблема в том, что когда я вызываю метод getUserStuff(Long id)
из репозитория (который затем вызывает метод из DAO), я получаю ноль (Log.d(TAG,"[getuserStuff] the DAO returned ---> "+info.getValue());
печатает ноль). У меня есть кнопка, которая печатает все, что у меня есть в базе данных, и в ней явно есть данные, и DAO должен что-то вернуть. Пример:
Звонок geteverything():
D/UserStuffRepository: EVERYTHING IN THE DATABASE [UserStuff{id=1, path_to_user_profile_pic='/path/path'}]
Затем вызов getUserStuff(1)
возвращает UserStuff с идентификатором 1 и pathToUserProfilePic, равным нулю.
Видите ли вы какие-либо явные проблемы, или я должен опубликовать дополнительные материалы, такие как инициализация репо, ViewModel и некоторые другие вещи из MainActivity? Спасибо!