我正在尝试为我的应用程序设置改造和 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())
subscribeOn
和observeOn
是否在执行呼叫?如果是,它是如何工作的(我习惯于排队方法(?我错过了什么吗?如何设置onResponse
和onFailure
回调?
>如果您使用retrofit2:adapter-rxjava2
它会自动包装您的 API 调用以Cold Observable
并在您订阅时自动执行API Request
。
是否
subscribeOn
和observeOn
正在执行呼叫
它不执行调用 API,当您调用 API 时,它会subscribe
使您的 API 请求在Background Thread
中运行并以Main Thread
处理响应
如何设置
onResponse
和失败回调?
subscribe
方法中,您可以传递Consumer
来处理Response
或Error
view_model.payments_rx?.subscribe({
// response
}, {
// error
})
可观察量基本上是事件流,每个事件都属于您正在观察的类型。在这种情况下Payment
.每次获得Payment
对象时,都会调用可观察量的onNext()
方法。流发出事件后,将调用onComplete
,如果发生错误,onError
(这两个事件都是终端事件(
您尚未发布JsonPayments
类,所以我不能肯定地说,但是您需要在getPostsV2()
中创建一个可观察量并将其返回,以便您可以观察或订阅它。
如果需要onResponse
和onFailure
回调,则可以基本上将Payment
对象包装到Result
具有这两个属性Result<Payment>
。您的最终可观察量将Observable<Result<Payment>>
其中每个事件的类型为Result<Payment>
。