繁体   English   中英

如何使用Retrofit2和RxJava2引发自定义异常

[英]How to throw custom exception with Retrofit2 and RxJava2

使用Retrofit2和RxJava2时,我会引发自定义异常的问题。

改装Api定义

public interface BackendInterface {

    @Headers({"......"})
    @POST("international-services/")
    Observable<BackendResponse> post(@Body BackendRequest request, @Header("sessionId") String sessionId);
}

改装API的用法

@Override
public Observable<SomeBusinessObject> getSomething(@NonNull String sessionId, @NonNull SomeOtherBusinessObject something) {
    BackendRequest br = createBackendRequest(something);
    return backendInterface.post(br, sessionId).map(backendResponse -> {

        if (backendResponse.getResult().getCode() != 0) {
            return Observable.error(new ServiceException("my custom exception"));
        }

        SomeBusinessObject result = mapBusinessObject(br);
        return result;
    });
}

问题是以下行

return Observerable.error(new ServiceException("my custom exception"));

Android Studio将其标记为错误,并说“不存在类型为y的实例,因此Observable符合SomeBusinessObject推断变量R具有不兼容的界限:等式约束:SomeBusinessObject的下界:Observable

IDE的快速修复建议使我的方法“ getSomething”返回Observable。

我不知道如何将自定义异常转发给我的可观察者。

您的.map试图返回SomeBusinessObject以及Observable<"SomeType"> 由于它们没有公共的父对象,因此无法解析Observable.error()应该返回的内容。

它使用.flatmap代替并将return替换为return Observable.just(result);的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM