归结为可观察:RxJava + Retrofit + Repository 模式



我正在尝试为我的应用程序设置改造和 rxjava 以对 Web 服务进行 api 调用。我在订阅主活动中的可观察对象时遇到一些问题。架构遵循视图模型/存储库模式,这是我的代码

存储 库

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(....)
}

现在,我不必观察实时数据,而是在数据到达时订阅可观察并设置回收器视图,但我不明白如何在订阅方法中做到这一点。但是我不明白如何在订阅方法中做到这一点。另外,我如何访问可观察对象内的付款数据?

我也不明白这里的这些台词,

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回调?

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

是否subscribeOnobserveOn正在执行呼叫

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

如何设置onResponse和失败回调?

subscribe方法中,您可以传递Consumer来处理ResponseError

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

可观察量基本上是事件流,每个事件都属于您正在观察的类型。在这种情况下Payment.每次获得Payment对象时,都会调用可观察量的onNext()方法。流发出事件后,将调用onComplete,如果发生错误,onError(这两个事件都是终端事件(

您尚未发布JsonPayments类,所以我不能肯定地说,但是您需要在getPostsV2()中创建一个可观察量并将其返回,以便您可以观察或订阅它。

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

最新更新