1

I'm just starting with Retrofit and RXJava. I have a api call that uploads a file and return a http response that has an empty body and status 200 (in case everythign works fine). I translated that to retrofit as:

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

But when whe use mApi.uploadFile(f), I get an exception:

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)

I read here that for an empty response without RxJava, the best practive is to use Void. That doesn't work with RXJava? Do I have to implement an adapter? .

Edit 1:

It is necessary to have a CallAdapterFactory added to retrofit as stated in the answer here. I also had to convert the File parameter. Still, the error remains.

Second step after I figure out how to map the request to retrofit is to chain muiltiple file uploads. How do I do that?

Links to advanced tutorials on using RXJava + Retrofit or samples are welcome too.

Community
  • 1
  • 1
Lu Araujo
  • 81
  • 8

1 Answers1

2

I guess your problem is you cannot pass a File as an argument, you should pass a RequestBody param as

RequestBody.create(mediaType, file);

So the signature of the retrofit call should look like:

@PUT("/in")
Observable<Void> uploadFile(RequestBody file);
gropapa
  • 577
  • 6
  • 10