我正在工作一个使用RxJava
进行网络通话的Android项目,现在我将其迁移到Coroutines
。由于代码库很大,因此我必须同时使用RxJava
和Coroutines
并将RxJava
方法迭代地转换为Coroutines
以最终形成完全基于以下内容的代码库Coroutines
。 Moshi
是首选的转换器。当我使用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的原因。任何帮助将不胜感激。谢谢!