【问题标题】:How to throw custom exception with Retrofit2 and RxJava2如何使用 Retrofit2 和 RxJava2 抛出自定义异常
【发布时间】:2017-10-19 13:05:35
【问题描述】:

我在使用 Retrofit2 和 RxJava2 时抛出自定义异常时遇到问题。

改造 API 定义

public interface BackendInterface {

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

Retrofit 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 将其标记为错误并说“不存在类型变量 T 的实例,因此 Observable 符合 SomeBusinessObject 推断变量 R 具有不兼容的边界:相等约束:SomeBusinessObject 下限:Observable

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

我不知道如何将自定义异常转发给我的 observable 的订阅者。

【问题讨论】:

  • 我不确定你从哪里得到Observerable。更正错字后,请更新您的问题。

标签: java android exception retrofit2 rx-java2


【解决方案1】:

您的.map 正在尝试返回SomeBusinessObjectObservable&lt;"SomeType"&gt;。由于它们没有共同的父对象,因此无法解析 Observable.error() 应该返回的内容。

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

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多