2016-05-12 17 views
1

Ich fange gerade mit Retrofit und RXJava an. Ich habe einen API-Aufruf, der eine Datei hochlädt und eine http-Antwort zurückgibt, die einen leeren Körper und Status 200 hat (falls alles gut funktioniert). Ich übersetzte das nachzurüsten als:Retrofit mit RXJava/RxAndroid: Wie funktioniert das Observable?

@PUT("/in") 
Observable<Void> uploadFile(@Body ResponseBody file); 

Aber wenn WHE verwenden mApi.uploadFile (f), erhalte ich eine Ausnahme:

Caused by: java.lang.IllegalArgumentException: Could not locate call 
adapter for rx.Observable<java.lang.Void>. Tried: 
    * retrofit.ExecutorCallAdapterFactory 
    at retrofit.Retrofit.nextCallAdapter(Retrofit.java:207) 
    at retrofit.Retrofit.callAdapter(Retrofit.java:175) 
    at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:45) 

ich here, dass für eine leere Antwort ohne RxJava lesen, die beste Praktisch ist die Verwendung von Leere. Das geht nicht mit RXJava? Muss ich einen Adapter implementieren? .

Edit 1:

Es ist notwendig, eine CallAdapterFactory hinzugefügt zu haben, wie in der Antwort here angegeben nachzurüsten. Ich musste auch den File-Parameter konvertieren. Trotzdem bleibt der Fehler bestehen.

Zweiter Schritt, nachdem ich herausfinden, wie man die Anforderung zur Nachrüstung abbilden soll, ist es, Filialupdates zu ketten. Wie mache ich das?

Links zu fortgeschrittenen Anleitungen zur Verwendung von RXJava + Retrofit oder Samples sind ebenfalls willkommen.

Antwort

2

Ich denke, Ihr Problem ist, dass Sie nicht eine Datei als Argument übergeben können, sollten Sie einen RequestBody param passieren, wie

RequestBody.create(mediaType, file); 

So ist die Unterschrift des Retrofit-Aufruf sollte wie folgt aussehen:

@PUT("/in") 
Observable<Void> uploadFile(RequestBody file); 
+0

Ja ... Ich habe das herausgefunden. Dennoch scheint mein Problem durch den Typ Void verursacht zu sein, der in "Observable " verwendet wurde. –

Verwandte Themen