[英]Proper way to setup ViewModel with LiveData and Repository with Retrofit
目前,我使用一項服務通過retrofit
進行網絡調用,但我想更新此模型以將ViewModel
與LiveData
一起使用。 我正在努力解決的問題是如何設置Repository
以更新 livedata 對象。
在我看到的示例中,人們在存儲庫中返回一個 LiveData 包裝對象,如下所示
public LiveData<NewsResponse> getData(){
final MutableLiveData<DataResponse> data = new MutableLiveData<>();
apiService.getData().enqueue(new Callback<DataResponse>() {
@Override
public void onResponse(Call<DataResponse> call, Response<DataResponse> response){
if (response.isSuccessful()){
data.setValue(response.body());
}
}
@Override
public void onFailure(Call<DataResponse> call, Throwable t) {
data.setValue(null);
}
});
return data;
}
然后在ViewModel
他們會做
private MutableLiveData<DataResponse> dataResponse = new MutableLiveData();
private Repository repository;
public PopularGamesViewModel(@NonNull Application application) {
repository = new Repository();
dataResponse = repository.getData();
}
public MutableLiveData<DataResponse> getData(){
return dataResponse;
}
然后在他們會做的Activity
viewModel.getData().observe(this, dataResponse -> {
if (dataResponse != null)
{
// Do something
}
});
對我來說似乎有問題的事情是任何時候我想從存儲庫中獲取新的/更新的數據時都會創建一個新的LiveData
對象,因此以前的觀察者將不再工作,所以我還必須再次設置觀察者,對嗎?
您如何設置它以便您不斷觀察LiveData
對象,然后從ViewModel
調用存儲庫以獲取任何新數據,然后ViewModel
從Repository
更新LiveData
對象?
我的建議有意義嗎?
據我了解您的問題,您想觀察實時數據的變化。 為此,您可能需要參考 MediatorLiveData。
public LiveData<PagedList<FooPojoList>> liveData;
private MediatorLiveData<PagedList<FooPojoList>> mediatorLiveData;
public FooListViewModel(@NonNull Application application) {
super(application);
mediatorLiveData=new MediatorLiveData<>();
}
public MediatorLiveData<PagedList<FooPojoList>> init(FooDao fooeDao,FooFrom foofrom,String orderBy) {
liveData = new LivePagedListBuilder(fooDao.getAllFooList(sqliteQuery), PAGE).build();
mediatorLiveData.addSource(liveData, new Observer<PagedList<FooPojoList>>() {
@Override
public void onChanged(@Nullable PagedList<FooPojoList> fooListPojos) {
mediatorLiveData.setValue(fooListPojos);
}
});
return mediatorLiveData;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.