Не удается получить простую строку из SQLite - PullRequest
0 голосов
/ 17 апреля 2019

Я следую архитектуре приложения 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? Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2019

Измените вашу функцию, чтобы она возвращала простую строку

LiveData<String> getPathToUserProfilePic(Long id);

На это

String getPathToUserProfilePic(Long id);

И, конечно, измените, как вы получите

String info = userStuffDao.getPathToUserProfilePic(id);
Log.d(TAG," [getuserStuff] the dao returned ---> " + info);

I 'Я уверен, что вам не нужны LiveData, потому что вы сохраняете String в UserStuff.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...