我只是从Retrofit和RXJava开始。我有一个api调用,该调用上传了一个文件并返回一个http响应,该响应的主体为空,状态为200(以防万一)。我将其翻译为:
@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)
我读过here,对于没有RxJava的空响应,最好的方法是使用Void。 RXJava不行吗?我必须实现适配器吗?
。
编辑1:
如答案here所述,有必要添加一个CallAdapterFactory进行改造。我还必须转换File参数。尽管如此,错误仍然存在。
我弄清楚如何将请求映射到改造后的第二步是链接多个文件上传。我怎么做?
也欢迎链接到有关使用RXJava + Retrofit或示例的高级教程。
最佳答案
我想您的问题是您不能将File作为参数传递,应该将RequestBody参数作为
RequestBody.create(mediaType, file);
因此,改造电话的签名应如下所示:
@PUT("/in")
Observable<Void> uploadFile(RequestBody file);
关于android - RXJava/RxAndroid的改进:Observable如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37187051/