如何使用 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) T 的实例,因此 Observable 符合 SomeBusinessObject 推断变量 R 具有不兼容的边界:等式约束:SomeBusinessObject 下限: 可观察
IDE 的快速修复建议使我的方法 "getSomething" return 可观察。
我不知道如何将自定义异常转发给我的可观察对象的订阅者。
您的 .map
正在尝试 return SomeBusinessObject
和 Observable<"SomeType">
。由于它们没有共同的父对象,因此无法解析 Observable.error()
应该 return.
的内容
解决方案是使用 .flatmap
代替 return 为 return Observable.just(result);
我在使用 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) T 的实例,因此 Observable 符合 SomeBusinessObject 推断变量 R 具有不兼容的边界:等式约束:SomeBusinessObject 下限: 可观察
IDE 的快速修复建议使我的方法 "getSomething" return 可观察。
我不知道如何将自定义异常转发给我的可观察对象的订阅者。
您的 .map
正在尝试 return SomeBusinessObject
和 Observable<"SomeType">
。由于它们没有共同的父对象,因此无法解析 Observable.error()
应该 return.
解决方案是使用 .flatmap
代替 return 为 return Observable.just(result);