TransWikia.com

Ошибка null object reference во ViewModel при попытке вызвать List из базы room с помощью rxJava (Single<List>)

Stack Overflow на русском Asked by Alex Rodionow on February 3, 2021

In Dao:

    @Query("SELECT * FROM person_table WHERE status = :statusname ORDER BY RANDOM() LIMIT 1")
Single<List<Person>> getGuyWho(String statusname);

In Repo:

public class PersonRepository {
    private Single<List<Person>> mGuyWho; 
    PersonRepository(Application application) {
        PersonRoomDatabase db = PersonRoomDatabase.getDatabase(application);        
        mPersonDao = db.PersonDao();
        mGuyWho = mPersonDao.getGuyWho("debil"); 
    }
    Single<List<Person>> getGuyWho() {
        return mGuyWho;
    }
}

In ViewModel:

public class PersonViewModel extends AndroidViewModel {
    private PersonRepository mRepository;
    CompositeDisposable composite = new CompositeDisposable();
    private Single<List<Person>> mGuyWho; 
    private List<Person> workList;
    public PersonViewModel(@NonNull Application application) {
        super(application);
        mRepository = new PersonRepository(application);
        workList = new ArrayList<>(); // это я инициалищировал workList;
        mGuyWho = mRepository.getGuyWho();

        mGuyWho.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new SingleObserver<List<Person>>() {
                @Override
                public void onSubscribe(Disposable d) {
                    composite.add(d);
                }

                @Override
                public void onSuccess(List<Person> people) {
                    Log.d(TAG, "onSuccess: called");
                    workList.addAll(people);
                }

                @Override
                public void onError(Throwable e) {
                    Log.d(TAG, "onError: called");
                    Toast.makeText(application, "NO DATA", Toast.LENGTH_SHORT).show();
                }
            });
    }
    public List<Person> getWorkList() {
        return workList;
    }
}

В логах указано ошибка null object reference в строках во ViewModel, где .subscribe(new SingleObserver<List<Person>>()
и workList.addAll(people); , хотя объекты с указанным statusname "debil" совершенно точно есть, и при вызове их через LiveData благополучно вызываются. Я полагаю что я что-то некорректно прописал во ViewModel, может не в том месте. Но не могу найти. Где может быть ошибка и как поправить?

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP