使用 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);
我刚开始使用 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)
我读到
编辑 1:
如答案
在我弄清楚如何将请求映射到改造后的第二步是链接多个文件上传。我该怎么做?
也欢迎链接到有关使用 RXJava + Retrofit 或示例的高级教程。
我猜你的问题是你不能将文件作为参数传递,你应该将 RequestBody 参数作为
RequestBody.create(mediaType, file);
因此改造调用的签名应如下所示:
@PUT("/in")
Observable<Void> uploadFile(RequestBody file);