【已解决】 RxJava 与 Retrofit 结合使用的报错怎么解决?(已解决)
我的接口类:
interface Api {
@GET("wxarticle/chapters/json")
fun GetWxArticle(): Observable<MovieBean>
}
// Retrofit
object RetrofitManager {
private val retrofit = Retrofit.Builder()
.baseUrl("https://wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
val mApi = retrofit.create(Api::class.java)
}
//beam类
data class MovieBean (
val `data`: List<ArticleData>,
val errorCode: Int,
val errorMsg: String
):Serializable
data class ArticleData(
val children: List<Any>,
val courseId: Int,
val id: Int,
val name: String,
val order: Int,
val parentChapterId: Int,
val userControlSetTop: Boolean,
val visible: Int
)
//在activity的使用
private fun initData() {
//GetWxArticle
val wxArticleObservable: Observable<MovieBean> = RetrofitManager.mApi.GetWxArticle()
wxArticleObservable.subscribeOn(Schedulers.io())//io线程 subscribe
//将网络结果转换成电影名集合
.map {
println("it == null : ${it == null}")
val array = ArrayList<String>()
val size = it.data.size
for (i in 0 until size) {
array.add(it.data[i].name)
}
return@map array
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<List<String>> {
override fun onSubscribe(d: Disposable?) {
}
override fun onNext(t: List<String>?) {
val adapter = ArrayAdapter<String>(
this@TestActivity,
android.R.layout.simple_list_item_1, t!!
)
setListAdapter(adapter)//设置adapter 刷新列表
}
override fun onError(e: Throwable?) {
}
override fun onComplete() {
}
})
}
报错是:

这是在说 retrofit 创建的时候添加的callConvertFactory出错了吗?
还是对我定义的这个类不支持呢?
我使用的支持库
//RxJava 库
implementation "io.reactivex.rxjava3:rxjava:3.0.12"
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
//implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
// 官方adapter仅支持rxjava1.0
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
这里应该是因为的call 适配器的问题,Rxjava3, 与 Retrofit 2 中用的addCallAdapterFactory应该是 RxJava3CallAdapterFactory.create()