【问题标题】:Retrofit with RXJava/RxAndroid: How does the Observable work?使用 RXJava/RxAndroid 进行改造:Observable 是如何工作的?
【发布时间】:2016-09-08 07:06:08
【问题描述】:

我刚开始使用 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 的高级教程或示例的链接。

【问题讨论】:

    标签: android rx-java retrofit2


    【解决方案1】:

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

    RequestBody.create(mediaType, file);
    

    所以改造调用的签名应该是这样的:

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

    【讨论】:

    • 是的...我想通了。仍然我的问题似乎是由“Observable”中使用的类型 Void 引起的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2017-12-05
    • 2016-01-29
    相关资源
    最近更新 更多