我正在学习Kotlin,最近遇到了一个问题。当我单击应用程序中的任何按钮时,就会出现类似标题所示的错误。这是完整的错误代码
java.lang.IllegalStateException: Could not find method buRequestEvent(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'buRequest'
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:423)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:380)
at android.view.View.performClick(View.java:5646)
at android.view.View$PerformClick.run(View.java:22473)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
我尝试了许多其他问题的修复程序,但大多数都是Java编写的,而我正在Kotlin编程。他们都还没有工作。
这是其中一个按钮的代码
来自 MainActivity.kt
protected fun buRequestEvent(view: View){
var userEmail = etEmail.text.toString()
myRef.child("Users").child(splitString(userEmail)).child("Request").push().setValue(myEmail)
}
我有一个大概的想法,问题可能是由于项目文件中的导入,所以这是导入列表
来自 MainActivity.kt
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.Toast
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
import kotlin.collections.HashMap
P.S。 -我已经检查了XML文件,按钮上添加了onClick属性
来自 activity_main.xml
<Button
android:id="@+id/buRequest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="buRequestEvent"
android:text="REQUEST" />
答案 0 :(得分:3)
问题是,onclick
方法应具有public
访问修饰符,因此请使用
public fun buRequestEvent(view: View){
var userEmail = etEmail.text.toString()
myRef.child("Users").child(splitString(userEmail)).child("Request").push().setValue(myEmail)
}
来自docs