订阅 observable:RxJava + Retrofit + Repository 模式

Suscribing to observable: RxJava + Retrofit + Repository pattern

我正在尝试为我的应用程序设置改造和 rxjava 以对网络服务进行 api 调用。我在主 activity 中订阅我的可观察对象时遇到了一些问题。该架构遵循 viewmodel/repository 模式,这是我的代码

存储库

class WisproRepository() {

    val request = ServiceBuilder.buildService(JsonPayments::class.java)
    val apicall: Observable<Payment> = request.getPostsV2(2, 100, "authorizationcode")

    fun getPayments(): Observable<Payment?>? {
        return apicall.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
    }

}

视图模型

class PaymentsViewModel : ViewModel() {

    var wisproRepository = WisproRepository()
    var payments_rx: Observable<Payment?>? = wisproRepository.getTopContributors()

}

主要活动

class MainActivity : AppCompatActivity() {
    var adapter: MyRecyclerViewAdapter? = null
    private var textView: TextView? = null

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //Getting payment object and updating view
        val view_model: PaymentsViewModel by viewModels()
        view_model.payments_rx?.subscribe(....)

    }

现在,我必须订阅 Observable 并在数据到达时设置 recyclerview,而不是观察实时数据,但我不明白如何在订阅方法中执行此操作。但我不明白如何在订阅方法中做到这一点。另外,如何访问可观察对象中的付款数据?

而且我不明白这里的这些行,

val request = ServiceBuilder.buildService(JsonPayments::class.java)
val apicall: Observable<Payment> = request.getPostsV2(2,100, "authorization code")
apicall.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())

subscribeOnobserveOn 正在通话吗?如果是,它是如何工作的(我习惯于排队方法)?我错过了什么吗?如何设置 onResponseonFailure 回调?

可观察对象基本上是事件流,每个事件都是您正在观察的类型。在这种情况下 Payment。每次你得到一个 Payment 对象,你的 observable 的 onNext() 方法就会被调用。流完成后将调用事件 onComplete,如果出现错误,将调用 onError(这两个都是 terminal 事件)

您还没有发布 JsonPayments class 所以我不能肯定地说,但是您需要在 getPostsV2() 中创建一个可观察对象并返回它,这样您就可以观察它或订阅它。

如果您想要 onResponseonFailure 回调,您基本上可以将 Payment 对象包装到 Result<Payment>,其中 Result 具有这两个属性。您最终的可观察对象将是 Observable<Result<Payment>>,其中每个事件的类型都是 Result<Payment>.

如果您使用 retrofit2:adapter-rxjava2,它会自动将您的 API 调用包装到 Cold Observable 并在您订阅时自动执行 API Request

Are subscribeOn and observeOn performing the call

它不执行调用 API,当您调用 subscribe 时 API 调用它使您的 API 请求 运行 在 Background Thread 并处理 Main Thread

中的响应

How can I setup onResponse and onFailure callbacks?

subscribe方法中你可以通过Consumer来处理ResponseError

view_model.payments_rx?.subscribe({
 // response
}, {
 // error
})