新线程中的android Rx函数
这个任务很简单-我需要在新线程中启动一些函数,并在UI中显示结果 这是我的密码新线程中的android Rx函数,android,kotlin,rx-android,Android,Kotlin,Rx Android,这个任务很简单-我需要在新线程中启动一些函数,并在UI中显示结果 这是我的密码 class FragmentKKMInfo { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) getKKMInfo().subscribeOn(Schedulers.io())
class FragmentKKMInfo {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
getKKMInfo().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ info ->
Log.i("RX", "LOG3")
//doUIStaff()
}, { error ->
Toast.makeText(context, error.message, Toast.LENGTH_LONG).show()
})
Log.i("RX", "LOG1")
}
private fun getKKMInfo(): Observable<KKMInfo> {
Thread.sleep(3000)
Log.i("RX", "LOG2")
//doSomeStaff()
return Observable.just(KKMInfo(
date,
shift_model_name,
shift_serial_number,
shift_state_string
))
}
}
class FragmentKKMInfo{
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
getKKMInfo().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅({info->
日志i(“RX”,“日志3”)
//杜伊斯塔夫
},{错误->
Toast.makeText(context,error.message,Toast.LENGTH\u LONG.show())
})
日志i(“RX”,“日志1”)
}
private fun getKKMInfo():可观察{
线程。睡眠(3000)
日志i(“RX”、“日志2”)
//doSomeStaff()
返回可观察的。刚刚(KKMInfo(
日期,
shift_型号_名称,
班次序列号,
移位状态字符串
))
}
}
我希望得到LOG1,LOG2,LOG3。但直到整个代码完成,我的日志是LOG2、LOG1、LOG3,片段才会显示
正确的方法是什么?这是因为
线程.sleep(3000)
正在主线程上执行。在执行线程睡眠(3000)
后,您正在创建rx流。您可以将getKKMInfo方法更改为以下方法以获得所需的结果:
private fun getKKMInfo(): Observable<KKMInfo> {
return Observable.fromCallable {
Thread.sleep(3000)
Log.i("RX", "LOG2")
//doSomeStaff()
return@fromCallable KKMInfo(
date,
shift_model_name,
shift_serial_number,
shift_state_string)
}
}
private fun getKKMInfo():可观察{
返回Observable.fromCallable{
线程。睡眠(3000)
日志i(“RX”、“日志2”)
//doSomeStaff()
return@fromCallableKKMInfo(
日期,
shift_型号_名称,
班次序列号,
移位(状态(字符串)
}
}
这是因为线程.sleep(3000)
正在主线程上执行。在执行线程睡眠(3000)
后,您正在创建rx流。您可以将getKKMInfo方法更改为以下方法以获得所需的结果:
private fun getKKMInfo(): Observable<KKMInfo> {
return Observable.fromCallable {
Thread.sleep(3000)
Log.i("RX", "LOG2")
//doSomeStaff()
return@fromCallable KKMInfo(
date,
shift_model_name,
shift_serial_number,
shift_state_string)
}
}
private fun getKKMInfo():可观察{
返回Observable.fromCallable{
线程。睡眠(3000)
日志i(“RX”、“日志2”)
//doSomeStaff()
return@fromCallableKKMInfo(
日期,
shift_型号_名称,
班次序列号,
移位(状态(字符串)
}
}