2017-10-19 118 views
0

使用Retrofit2和RxJava2时,抛出自定义异常有问题。如何使用Retrofit2和RxJava2抛出自定义异常

改造阿比定义

public interface BackendInterface { 

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

改造阿比

@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中标记它因为Observable符合SomeBusinessObject推理变量R具有不兼容的界限:等于约束:SomeBusinessObject下界:Observable

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

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

+0

替换回报我不知道你在哪里得到'Observerable'的解决方案。一旦你改正了错字,请更新你的问题。 –

回答

1

您的.map正试图返回SomeBusinessObject以及Observable<"SomeType">。由于它们没有共同的父对象,因此它不能解决什么Observable.error()应返回。

它使用.flatmap,而不是与return Observable.just(result);