Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法调用函数声明的Kotlin变量值_Java_Android_Firebase_Kotlin - Fatal编程技术网

Java 无法调用函数声明的Kotlin变量值

Java 无法调用函数声明的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连接。所以,在加载时干杯-。。。

我在类中声明一个名为basic_id的全局变量

我将数据库值分配给自定义对象basicDetailsModel::class.java,并将其值分配给全局变量basic_id,其工作正常 当活动开始时,它会在加载时显示一个toast-00 但当点击按钮时,它会显示一个点击的吐司按钮-06
为什么它在加载时不在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()}
            })
    }
}