如何解决无法将 List<Obj>从 Single<List<Obj>> 获取从 ViewModel 切换到 Activity RecyclerView 保持为空原因在哪里?
在道中:
@Query("SELECT * FROM person_table WHERE status = :statusname ORDER BY RANDOM() LIMIT 1")
Single<List<Person>> getGuyWho(String statusname);
在回购中:
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;
}
}
在视图模型中:
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<>(); //initializing 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;
}
}
В 活动:
public class MudakActivity extends AppCompatActivity implements CardStackListener {
List<Person> debilList;
private PersonViewModel debilViewModel;
private CardStackView debilCardStackView;
private MudakAdapter debilAdapter;
//declaring variables
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
debilAdapter = new DebilAdapter(new DebilAdapter.PersonDiff(),debilList);
debilCardStackView.setLayoutManager(debilCardStackLayoutManager);
debilCardStackView.setAdapter(debilAdapter);
//initializing other variables
debilViewModel = new ViewModelProvider(this,ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()))
.get(PersonViewModel.class);
debilList = debilViewModel.getWorkList();
}
}
recyclerView (cardStackView) 显示为空,尽管具有“debil”状态名称的对象肯定存在(当我使用 LiveData 调用它们时,它们会显示在视图中)。我想我在 ViewModel 中输入了错误的内容,可能不是在适当的地方。找不到。错误可能在哪里以及如何解决?
解决方法
workList
之后会发生变化,并且您在它更新之前正在使用它。最好将 workList
设为 LiveData
并观察变化。当数据设置为列表时,您必须通知适配器进行更改。
public class PersonViewModel extends AndroidViewModel {
private PersonRepository mRepository;
CompositeDisposable composite = new CompositeDisposable();
private Single<List<Person>> mGuyWho;
public LiveData<List<Person>> workList = new MutableLiveData<>();
public PersonViewModel(@NonNull Application application) {
super(application);
mRepository = new PersonRepository(application);
workList = new ArrayList<>(); //initializing 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) {
workList.setValue(people);
}
@Override
public void onError(Throwable e) { }
});
}
}
观察组件中的 LiveData
。
debilViewModel.workList.observe(this,(Observer<List<Person>>) personList -> {
debilAdapter.submitList(personList);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。