我刚开始使用Retrofit和RXJava。我有一个api调用,上传一个文件并返回一个空主体和状态200的http响应(如果每个标记工作正常)。我把它翻译为改装:
@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或样本的高级教程链接。
答案 0 :(得分:2)
我猜你的问题是你无法传递File作为参数,你应该传递一个RequestBody参数
RequestBody.create(mediaType, file);
因此,改装电话的签名应如下所示:
@PUT("/in")
Observable<Void> uploadFile(RequestBody file);