Home Articles

使用RXJava / RxAndroid进行改造:Observable如何工作?

Asked
Viewed 155 times
1

我刚开始使用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或样品的高级教程 .

1 Answer

  • 2

    我想你的问题是你无法传递File作为参数,你应该传递一个RequestBody参数

    RequestBody.create(mediaType, file);
    

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

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

Related