带有 MVVM 和 Retrofit 的 RXjava
RXjava with MVVM and Retrofit
我想将 RxJava 与 MVVM 一起使用,但我不明白为什么它不响应 CompositeDisposable 我的 Response class
我想处理 RxJava,但我不知道如何 link CompositeDisposable 和
实时数据
...
LiveData
public
LiveData <HomeResponse> setMenu() {
final MutableLiveData <HomeResponse> data = new MutableLiveData <>( );
compositeDisposable.add(apiRequest.getMenu()
.subscribeOn( Schedulers.io())
.observeOn( AndroidSchedulers.mainThread())
.subscribe( new Consumer <Response<HomeResponse>>() {
@Override
public void accept(Response<HomeResponse>
registrationModelResponse) throws Exception {
data.setValue(registrationModelResponse.body());
}
}));
return data;
}
.......
响应 class :
public
class HomeResponse {
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("Menu")
@Expose
private List <MainMenu> MainMenu = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<MainMenu> getMainMenu() {
return MainMenu;
}
public void setAUsers(List<MainMenu> MainMenu) {
this.MainMenu = MainMenu;
}
}
.......
我的 API :
@GET("getmenu.php")
Observable<List <HomeResponse>> getMenu();
.......
错误听到...
.subscribe( new Consumer <Response<HomeResponse>>() {
@Override
public void accept(Response<HomeResponse>
registrationModelResponse) throws Exception {
data.setValue(registrationModelResponse.body());
}
}));
enter image description here
我想你可能混淆了如何处理 LiveData
。
通常,如果您想从 LiveData
获取值,您的 activity 或片段就是需要观察它的人。像这个例子。
// I have 'valueA' as variable in viewModel.
val valueA = MutableLiveData<String>()
// In Main Activity. I observe 'valueA' here
fun initObserver() {
viewModel.valueA.observe(this, Observer { it -> // it is value of livedata 'data'
// do something with 'valueA'.
})
}
并且您的 setMenu()
函数不应 return 来自 API 的值,因为当您这样调用 API 时,它是异步调用。因此,当您 return 您的价值时,您的 API 调用仍未完成。
这应该是你的职能。
public void setMenu() {
final MutableLiveData <List<HomeResponse>> data = new MutableLiveData <>( );
compositeDisposable.add(apiRequest.getMenu()
.subscribeOn( Schedulers.io())
.observeOn( AndroidSchedulers.mainThread())
.subscribe( new Consumer <List<HomeResponse>>() {
@Override
public void accept(List<HomeResponse>
registrationModelResponse) throws Exception {
data.setValue(registrationModelResponse);
}
}));
}
PS。对不起我糟糕的英语水平。
PS2。您来自 API 的回复将 return List<HomeResponse>
,但在您的消费者中它变成了 Result<HomeResponse>
,因此会导致错误。
我想将 RxJava 与 MVVM 一起使用,但我不明白为什么它不响应 CompositeDisposable 我的 Response class
我想处理 RxJava,但我不知道如何 link CompositeDisposable 和
实时数据
...
LiveData
public
LiveData <HomeResponse> setMenu() {
final MutableLiveData <HomeResponse> data = new MutableLiveData <>( );
compositeDisposable.add(apiRequest.getMenu()
.subscribeOn( Schedulers.io())
.observeOn( AndroidSchedulers.mainThread())
.subscribe( new Consumer <Response<HomeResponse>>() {
@Override
public void accept(Response<HomeResponse>
registrationModelResponse) throws Exception {
data.setValue(registrationModelResponse.body());
}
}));
return data;
}
....... 响应 class :
public
class HomeResponse {
@SerializedName("status")
@Expose
private String status;
@SerializedName("totalResults")
@Expose
private Integer totalResults;
@SerializedName("Menu")
@Expose
private List <MainMenu> MainMenu = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getTotalResults() {
return totalResults;
}
public void setTotalResults(Integer totalResults) {
this.totalResults = totalResults;
}
public List<MainMenu> getMainMenu() {
return MainMenu;
}
public void setAUsers(List<MainMenu> MainMenu) {
this.MainMenu = MainMenu;
}
}
....... 我的 API :
@GET("getmenu.php")
Observable<List <HomeResponse>> getMenu();
....... 错误听到...
.subscribe( new Consumer <Response<HomeResponse>>() {
@Override
public void accept(Response<HomeResponse>
registrationModelResponse) throws Exception {
data.setValue(registrationModelResponse.body());
}
}));
enter image description here
我想你可能混淆了如何处理 LiveData
。
通常,如果您想从 LiveData
获取值,您的 activity 或片段就是需要观察它的人。像这个例子。
// I have 'valueA' as variable in viewModel.
val valueA = MutableLiveData<String>()
// In Main Activity. I observe 'valueA' here
fun initObserver() {
viewModel.valueA.observe(this, Observer { it -> // it is value of livedata 'data'
// do something with 'valueA'.
})
}
并且您的 setMenu()
函数不应 return 来自 API 的值,因为当您这样调用 API 时,它是异步调用。因此,当您 return 您的价值时,您的 API 调用仍未完成。
这应该是你的职能。
public void setMenu() {
final MutableLiveData <List<HomeResponse>> data = new MutableLiveData <>( );
compositeDisposable.add(apiRequest.getMenu()
.subscribeOn( Schedulers.io())
.observeOn( AndroidSchedulers.mainThread())
.subscribe( new Consumer <List<HomeResponse>>() {
@Override
public void accept(List<HomeResponse>
registrationModelResponse) throws Exception {
data.setValue(registrationModelResponse);
}
}));
}
PS。对不起我糟糕的英语水平。
PS2。您来自 API 的回复将 return List<HomeResponse>
,但在您的消费者中它变成了 Result<HomeResponse>
,因此会导致错误。