改造 Observable return 数据
Retrofit Observable return data
这种将改装与 rx android observable 一起使用的正确方法是否正确:
服务中:
@GET("/users/{userId}/contacts")
Observable<Response<List<Contact>>> getContactsForUser(@Path("userId") int userId);
在调用activity中:
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?
通常的方法是什么?
这是正确的方法:
@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();
}
}
};
两者都是正确的。您使用哪种取决于您的偏好和您的情况。当您使用 Observable<List<Contact>>
调用时,适配器会为您检查 isSuccessful()
,如果是错误,它会将响应包装在 HttpException
中。使用 Response
给你更多的灵活性,但不是必须的,除非你想根据特定的响应代码做一些特殊的处理。
这种将改装与 rx android observable 一起使用的正确方法是否正确:
服务中:
@GET("/users/{userId}/contacts")
Observable<Response<List<Contact>>> getContactsForUser(@Path("userId") int userId);
在调用activity中:
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? 通常的方法是什么?
这是正确的方法:
@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();
}
}
};
两者都是正确的。您使用哪种取决于您的偏好和您的情况。当您使用 Observable<List<Contact>>
调用时,适配器会为您检查 isSuccessful()
,如果是错误,它会将响应包装在 HttpException
中。使用 Response
给你更多的灵活性,但不是必须的,除非你想根据特定的响应代码做一些特殊的处理。