新线程中的android Rx函数

新线程中的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())

这个任务很简单-我需要在新线程中启动一些函数,并在UI中显示结果

这是我的密码

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_型号_名称,
班次序列号,
移位(状态(字符串)
}
}