将协程与RxJava和Moshi一起使用不起作用

时间:2019-12-10 06:24:44

标签: android kotlin rx-java kotlin-coroutines moshi

我正在工作一个使用RxJava进行网络通话的Android项目,现在我将其迁移到Coroutines。由于代码库很大,因此我必须同时使用RxJavaCoroutines并将RxJava方法迭代地转换为Coroutines以最终形成完全基于以下内容的代码库CoroutinesMoshi是首选的转换器。当我使用RxJava时,网络调用可以正常工作并返回期望值。但是我使用协程的暂挂方法未返回预期的数据。 JSON响应值不会填充返回的POJO。 这是我用于构建Retrofit

的代码
        retrofit = Retrofit.Builder()
                .baseUrl(BuildConfig.BASE_URL)
                .addConverterFactory(MoshiConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
                .client(buildHttpClient())
                .build()

这是我的suspend方法,其中不填充响应正文中的POJO。


    @PUT(EndPoints.SOME_ENDPOINT + "{some_id}/")
    suspend fun addSomethingSomewhere(@Body body: RequestBody, @Path("some_id") someID: String): Response<SomeModel>

这是我尝试过的POJO的不同版本

// version 1
@Parcelize
data class SomeModel(var someValue: String? = null,
            var someOtherValue: List<String>? = null)

// version 2
@JsonClass(generateAdapter = true)
class SomeModel(@field:Json(name = "someValue") var someValue: String? = null,
               @field:Json(name = "someOtherValue") var someOtherValue: List<String>? = null)

我尝试将Response<SomeModel>替换为SomeModel的suspend方法的返回类型,但是它仍然不起作用。我认为,在构建改造addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))时,该问题与该行有关,因为为RxJava提供了调用适配器,也许这就是为什么我的基于协程的代码未按预期填充POJO的原因。任何帮助将不胜感激。谢谢!

0 个答案:

没有答案