改造 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 给你更多的灵活性,但不是必须的,除非你想根据特定的响应代码做一些特殊的处理。