Kotlin对象OnComplete侦听器

Kotlin对象OnComplete侦听器,kotlin,Kotlin,我需要知道我的对象最终何时被设置(从internet获取数据),这样我就可以正确地使用它而不会出现任何NullPointerException。是否有一种方法可以使对象在所有设置完成时发出通知,就像onComplete lambdas作为函数参数一样。简单的问题,但有任何帮助:)您可以在类中创建函数类型变量。在活动中设置函数。当对象准备好时调用它 class MyObject() { var onComplete : (()-> Unit)? = null fun set

我需要知道我的对象最终何时被设置(从internet获取数据),这样我就可以正确地使用它而不会出现任何NullPointerException。是否有一种方法可以使对象在所有设置完成时发出通知,就像onComplete lambdas作为函数参数一样。简单的问题,但有任何帮助:)

您可以在类中创建函数类型变量。在活动中设置函数。当对象准备好时调用它

class MyObject()
{
    var onComplete : (()-> Unit)? = null

    fun setup()
    {
        //setup your object
        onComplete?.invoke()
    }
}
在你的活动中

val myObject = MyObject()
myObject.onComplete = {
    //..things to do after setup...
}
myObject.setup()

如果需要,也可以将其放入构造函数中。

可以在类中创建函数类型变量。在活动中设置函数。当对象准备好时调用它

class MyObject()
{
    var onComplete : (()-> Unit)? = null

    fun setup()
    {
        //setup your object
        onComplete?.invoke()
    }
}
在你的活动中

val myObject = MyObject()
myObject.onComplete = {
    //..things to do after setup...
}
myObject.setup()

如果需要,也可以将其放入构造函数中。

在android中,如果添加了支持库依赖项,我们可以使用
LiveData

class Result

object MyObject {
    val onComplete: MutableLiveData<Result> = MutableLiveData()

    fun setUp() {
        // do something
        onComplete.setValue(Result()) // main thread
        // onComplete.postValue(Result()) // other thread
    }
}

class SampleActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        MyObject.onComplete.observe(this, Observer { result ->
            // do something with result
        })
        MyObject.setUp()
    }
}
类结果
对象对象对象{
val onComplete:MutableLiveData=MutableLiveData()
趣味设置(){
//做点什么
onComplete.setValue(Result())//主线程
//onComplete.postValue(Result())//其他线程
}
}
类SampleActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
MyObject.onComplete.observe(此,观察者{结果->
//做一些有结果的事情
})
MyObject.setUp()
}
}

如果不熟悉此方法,请查看observer模式或LiveData。

在android中,如果添加了支持库依赖项,我们可以使用
LiveData

class Result

object MyObject {
    val onComplete: MutableLiveData<Result> = MutableLiveData()

    fun setUp() {
        // do something
        onComplete.setValue(Result()) // main thread
        // onComplete.postValue(Result()) // other thread
    }
}

class SampleActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        MyObject.onComplete.observe(this, Observer { result ->
            // do something with result
        })
        MyObject.setUp()
    }
}
类结果
对象对象对象{
val onComplete:MutableLiveData=MutableLiveData()
趣味设置(){
//做点什么
onComplete.setValue(Result())//主线程
//onComplete.postValue(Result())//其他线程
}
}
类SampleActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
MyObject.onComplete.observe(此,观察者{结果->
//做一些有结果的事情
})
MyObject.setUp()
}
}

如果不熟悉此方法,请查看observer pattern或LiveData。

NullPointerException不应出现在kotlin中,只要您不强制展开。你们如何从互联网上获取数据?通常,任何网络调用要么接受回调侦听器,要么阻塞线程。因此,您可能正在为网络调用提供侦听器,或者在后台线程上执行网络调用以等待它完成。@RickyMo我正在从Firebase Firestore获取数据。当我的对象完全设置好时,我可以告诉它内部,但我不知道如何告诉对象外部(我的Android活动持有该对象)NullPointerException在kotlin中永远不会发生,只要你不强制展开。你们如何从互联网上获取数据?通常,任何网络调用要么接受回调侦听器,要么阻塞线程。因此,您可能正在为网络调用提供侦听器,或者在后台线程上执行网络调用以等待它完成。@RickyMo我正在从Firebase Firestore获取数据。当我的对象完全设置好时,我可以告诉它内部,但我不知道如何告诉对象外部的东西(我的Android活动持有该对象)