订阅 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())
subscribeOn
和 observeOn
正在通话吗?如果是,它是如何工作的(我习惯于排队方法)?我错过了什么吗?如何设置 onResponse
和 onFailure
回调?
可观察对象基本上是事件流,每个事件都是您正在观察的类型。在这种情况下 Payment
。每次你得到一个 Payment
对象,你的 observable 的 onNext()
方法就会被调用。流完成后将调用事件 onComplete
,如果出现错误,将调用 onError
(这两个都是 terminal 事件)
您还没有发布 JsonPayments
class 所以我不能肯定地说,但是您需要在 getPostsV2()
中创建一个可观察对象并返回它,这样您就可以观察它或订阅它。
如果您想要 onResponse
和 onFailure
回调,您基本上可以将 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
来处理Response
或Error
view_model.payments_rx?.subscribe({
// response
}, {
// error
})
我正在尝试为我的应用程序设置改造和 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())
subscribeOn
和 observeOn
正在通话吗?如果是,它是如何工作的(我习惯于排队方法)?我错过了什么吗?如何设置 onResponse
和 onFailure
回调?
可观察对象基本上是事件流,每个事件都是您正在观察的类型。在这种情况下 Payment
。每次你得到一个 Payment
对象,你的 observable 的 onNext()
方法就会被调用。流完成后将调用事件 onComplete
,如果出现错误,将调用 onError
(这两个都是 terminal 事件)
您还没有发布 JsonPayments
class 所以我不能肯定地说,但是您需要在 getPostsV2()
中创建一个可观察对象并返回它,这样您就可以观察它或订阅它。
如果您想要 onResponse
和 onFailure
回调,您基本上可以将 Payment
对象包装到 Result<Payment>
,其中 Result
具有这两个属性。您最终的可观察对象将是 Observable<Result<Payment>>
,其中每个事件的类型都是 Result<Payment>
.
如果您使用 retrofit2:adapter-rxjava2
,它会自动将您的 API 调用包装到 Cold Observable
并在您订阅时自动执行 API Request
。
Are
subscribeOn
andobserveOn
performing the call
它不执行调用 API,当您调用 subscribe
时 API 调用它使您的 API 请求 运行 在 Background Thread
并处理 Main Thread
How can I setup
onResponse
and onFailure callbacks?
在subscribe
方法中你可以通过Consumer
来处理Response
或Error
view_model.payments_rx?.subscribe({
// response
}, {
// error
})