2017-10-19 40 views
0

J'ai un problème avec le lancement d'exceptions personnalisées lors de l'utilisation de Retrofit2 et RxJava2.Comment lancer une exception personnalisée avec Retrofit2 et RxJava2

Rénovation définition api

public interface BackendInterface { 

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

Utilisation de Rénovation 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; 
    }); 
} 

Le problème est la ligne suivante

return Observerable.error(new ServiceException("my custom exception")); 

Android Studio est le marque comme erreur et dit "aucune instance de type variable (y) T existe pour que Observable soit conforme à la variable d'inférence SomeBusinessObject R a des limites incompatibles: contraintes d'égalité: Limites inférieures SomeBusinessObject: Observable

La solution rapide de l'IDE suggère de faire ma méthode "getSomething" renvoie Observable.

Je n'ai aucune idée de comment transférer des exceptions personnalisées à l'abonné de mon observable.

+0

Je ne sais pas où vous obtenez 'Observerable' de. Une fois que vous aurez corrigé la faute de frappe, veuillez mettre à jour votre question. –

Répondre

1

Votre .map essaie de renvoyer à la fois SomeBusinessObject ainsi que Observable<"SomeType">. Comme ils n'ont pas d'objet parent commun, ils ne peuvent pas résoudre ce que doit renvoyer Observable.error().

La solution à utiliser .flatmap au lieu et à remplacer le retour avec return Observable.just(result);