【发布时间】:2018-04-26 07:55:43
【问题描述】:
我正在使用 Play Services Auth api Phone,到目前为止我有以下功能
fun startSmsListener() {
val client = SmsRetriever.getClient(applicationContext /* context */);
val task = client.startSmsRetriever();
task.addOnSuccessListener(object : OnSuccessListener<Void> {
override fun onSuccess(p0: Void?) {
//do somethin
}
})
task.addOnFailureListener(object : OnFailureListener {
override fun onFailure(p0: Exception) {
//Handle error
}
})
}
现在我想把它放在一个 SmsManager 类中,并将它转换成一个 Single/Observable,这样我就可以在我的视图模型中以反应的方式处理它。我该怎么做?
到目前为止,我得到了这个:
var single = Single.create(SingleOnSubscribe<Void> { e ->
val task = client.startSmsRetriever()
task.addOnSuccessListener {
e.onSuccess(it)
}
task.addOnFailureListener {
e.onError(it)
}
})
但我不确定这段代码是否正确,是否缺少一些东西,比如在处理后删除监听器。
有什么帮助吗?
【问题讨论】:
-
Single<Void>不起作用,因为不允许使用nulls。使用Completable。
标签: android kotlin rx-java reactive-programming rx-java2