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