2017-10-19 13 views
0

Retrofit2とRxJava2を使用するときにカスタム例外をスローする際に問題があります。レトロフィットのAPIRetrofit2と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推論変数に準拠するように、variable(y)型のインスタンスが存在しないことを示す。Rは互換性のない境界を持つ:SomeBusinessObject下限:Observable

IDEのクイックフィックスは、私のメソッドgetSomethingはObservableを返します。

カスタム例外を私の観測対象の加入者に転送する方法はわかりません。

+0

とリターンを交換するためのソリューション。入力ミスを修正したら、質問を更新してください。 –

答えて

1

.mapSomeBusinessObjectObservable<"SomeType">の両方を返そうとしています。彼らは共通の親オブジェクトを持たないので、返すべきものを解決することはできません。Observable.error()

ではなく.flatmapを使用して、私はあなたから `Observerable`を取得している場所がわからないんだけどreturn Observable.just(result);

関連する問題