Java 无法调用函数声明的Kotlin变量值
我在类中声明一个名为basic_id的全局变量 我将数据库值分配给自定义对象basicDetailsModel::class.java,并将其值分配给全局变量basic_id,其工作正常 当活动开始时,它会在加载时显示一个toast-00 但当点击按钮时,它会显示一个点击的吐司按钮-06Java 无法调用函数声明的Kotlin变量值,java,android,firebase,kotlin,Java,Android,Firebase,Kotlin,我在类中声明一个名为basic_id的全局变量 我将数据库值分配给自定义对象basicDetailsModel::class.java,并将其值分配给全局变量basic_id,其工作正常 当活动开始时,它会在加载时显示一个toast-00 但当点击按钮时,它会显示一个点击的吐司按钮-06 为什么它在加载时不在Toast-06上工作。。。Toast显示basic_id变量没有时间更改,bcz您正在发出异步网络请求,该请求可能会执行一段时间,具体取决于internet连接。所以,在加载时干杯-。。。
为什么它在加载时不在Toast-06上工作。。。Toast显示basic_id变量没有时间更改,bcz您正在发出异步网络请求,该请求可能会执行一段时间,具体取决于internet连接。所以,在加载时干杯-。。。将在更改基本id变量之前显示。ValueEventListener不会在注册后立即运行,它将在网络请求完成后触发,您可能希望使用协同路由,但对于您的情况,一个简单而理想的解决方案是在此处使用回调 覆盖乐趣onCreatesavedInstanceState:捆绑?{ //... 设置变量后将触发loadBasicDetails{//: Toast.makeTextthis,加载时-+基本id,Toast.LENGTH\u SHORT.show } //... } 私有内联fun loadBasicDetailscrossinline回调:->单位{ database.getReferencebasic.orderByChildepf_no.equalTo12345 .AddValueEventListener对象:ValueEventListener{ 覆盖数据更改数据:DataSnapshot{ //…设置变量 回拨 } 重写fun OnCancellerderRor:DatabaseError{error.toException} } }
在完成赋值后,使用keyPlace在loadBasicDetails函数中添加类basicDetailsModel和firebase数据库结构。第一个吐司没有基本id的值。您的第二个吐司在单击按钮时。当你点击按钮时,这个值已经有了基本id。这不是一个全局变量。它是在类中定义的,因此它是类成员属性。
class userOverview : AppCompatActivity() {
private lateinit var database: FirebaseDatabase
private var basic_id : String = "00"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.user_overview)
database = FirebaseDatabase.getInstance()
loadBasicDetails() //this function will assign basic_id a non-zero value
//Display Toast of current value of basic_id
Toast.makeText(this, "On loading - "+basic_id, Toast.LENGTH_SHORT).show()
button.setOnClickListener() {
Toast.makeText(this, "Button clicked - "+basic_id, Toast.LENGTH_SHORT).show()
}
}
private fun loadBasicDetails() {
val q : Query = database.getReference("basic").orderByChild("epf_no").equalTo("12345")
q.addValueEventListener(object : ValueEventListener {
override fun onDataChange(data: DataSnapshot) {
for (dataChild in data.children) {
val basicDetails = dataChild.getValue(basicDetailsModel::class.java)
basic_id = basicDetails!!.basic_id
}
}
override fun onCancelled(error: DatabaseError) {error.toException()}
})
}
}