使用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将其标记为错误并说“没有类型变量(y)T的实例存在,以便Observable符合SomeBusinessObject推理变量R具有不兼容的边界:相等约束:SomeBusinessObject下限:Observable
IDE的快速修复建议让我的方法“getSomething”返回Observable。
我不知道如何将自定义异常转发给我的observable的订阅者。
答案 0 :(得分:1)
您的.map
正在尝试同时返回SomeBusinessObject
和Observable<"SomeType">
。由于它们没有共同的父对象,因此无法解决Observable.error()
应返回的内容。
使用.flatmap
的解决方案,并将回复替换为return Observable.just(result);