13
Дек
2020

Ошибка – получаю null при попытке получить из базы данных Room список объектов через (объекты точно есть)

У меня прописаны методы в Dao, в Repository, в ViewModel и в Activity чтобы получить из Room базы список List, но я получаю пустой список (ошибка attempt to invoke on a null Object reference) Объекты такие точно есть, поскольку такой-же метод, только с LiveData - работает, т.е. метод LiveData<List> getNoobs выносит список всех noobs через observer. Но в данном случае мне нужно просто получить список 5 случайных обектов без ЛивДата. Получаю null. Где может быть ошибка?.. спасибо.

In PersonDao:

@Dao
public interface PersonDao {
    //other methods of PersonDao

    @Query("SELECT * FROM person_table WHERE status = :status ORDER BY RANDOM() LIMIT 5")
    List<Person> getFivePersonsFrom(String status);
} 

In PersonRepository:

public class PersonRepository {
    private PersonDao mPersonDao;
    private List<Person> mFivePersonsFrom;

    //other methods

    List<Person> getFivePersonsFrom(String status) {
        PersonRoomDatabase.databaseWriteExecutor.execute(() -> {
            mPersonDao.getFivePersonsFrom("noob");
        });
        return mFivePersonsFrom;
    }
}

In PersonViewModel:

public class PersonViewModel extends AndroidViewModel {
    private PersonRepository mRepository;
    public List<Person> mFivePersonsFrom;
    public PersonViewModel(@NonNull Application application) {
        super(application);
        mRepository = new PersonRepository(application);
        mFivePersonsFrom = mRepository.getFivePersonsFrom("noob");
        //other methods
    }
    public List<Person> getFivePersonsFrom() {
        mRepository.getFivePersonsFrom("noob");
        return mFivePersonsFrom;
    }  
}

In MainActivity:

private CardStackView noobCardStackView;
private NoobAdapter noobAdapter;
List<Person> noobList;     
// other
protected void onCreate(Bundle savedInstanceState) {
    noobViewModel = new ViewModelProvider(this,
            ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()))
            .get(PersonViewModel.class);
    noobList = noobiewModel.getFivePersonsFrom();
noobAdapter = new NoobAdapter(new NoobAdapter.NoobDiff(), noobList); 
    noobCardStackView.setAdapter(noobAdapter);
    // methods
}

Источник: https://ru.stackoverflow.com/questions/1218076/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D1%8E-null-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B5-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B8%D0%B7-%D0%B1%D0%B0%D0%B7%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-room-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D1%87

Тебе может это понравится...

Добавить комментарий