使用 RXJava/RxAndroid 改造:Observable 是如何工作的?

Retrofit with RXJava/RxAndroid: How does the Observable work?

我刚开始使用 Retrofit 和 RXJava。我有一个上传文件的 api 调用和 return 一个空主体和状态 200 的 http 响应(以防一切正常)。我将其翻译为 retrofit 为:

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

但是当使用 mApi.uploadFile(f) 时,我得到一个异常:

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)

我读到 对于没有 RxJava 的空响应,最好的做法是使用 Void。这不适用于 RXJava?我必须实施适配器吗? .

编辑 1:

如答案 中所述,有必要添加一个 CallAdapterFactory 进行改造。我还必须转换 File 参数。尽管如此,错误仍然存​​在。

在我弄清楚如何将请求映射到改造后的第二步是链接多个文件上传。我该怎么做?

也欢迎链接到有关使用 RXJava + Retrofit 或示例的高级教程。

我猜你的问题是你不能将文件作为参数传递,你应该将 RequestBody 参数作为

RequestBody.create(mediaType, file);

因此改造调用的签名应如下所示:

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