这是与rx android observable一起使用改造的正确方法:
在服务中:
@GET("/users/{userId}/contacts")
Observable<Response<List<Contact>>> getContactsForUser(@Path("userId") int userId);
在通话活动中:
Subscriber<Response<List<Contact>>> subscriber = new Subscriber<Response<List<Contact>>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
isLoading.set(false);
hasError.set(true);
ProblemReporter.Report(throwable);
}
@Override
public void onNext(Response<List< Contact >> listResponse) {
isLoading.set(false);
if (listResponse.isSuccessful())
{
hasError.set(false);
List<Contact> list = listResponse.body();
showList()
}
else
{
showError();
}
}
};
...
subscription = peopleService.getContactsForUser(Credentials.getLoggedUser().getId())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.subscribeScheduler())
.subscribe(subscriber);
或者我应该这样称呼它:
@GET("/users/{userId}/contacts")
Observable<List<Contact>> getContactsForUser(@Path("userId") int userId);
没有响应,即没有检查isSuccessful()onComplete,假设如果没有错误就会调用onComplete? 通常的方法是什么?
答案 0 :(得分:1)
这是正确的方法:
@GET("/users/{userId}/contacts")
Observable<List<Contact>> getContactsForUser(@Path("userId") int userId);
//
Subscriber<List<Contact>> subscriber = new Subscriber<List<Contact>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
isLoading.set(false);
hasError.set(true);
ProblemReporter.Report(throwable);
}
@Override
public void onNext(List< Contact > listResponse) {
isLoading.set(false);
if (listResponse.isSuccessful())
{
hasError.set(false);
List<Contact> list = listResponse.body();
showList()
}
else
{
showError();
}
}
};
答案 1 :(得分:1)
两者都是正确的。您使用的是偏好和您的情况。当您使用Observable<List<Contact>>
进行呼叫时,适配器会为您检查isSuccessful()
,如果是错误,它会将响应包装在HttpException
中。使用Response
可以提供更大的灵活性,但除非您想根据特定的响应代码进行一些特殊处理,否则不需要这样做。