【发布时间】:2020-01-17 13:26:26
【问题描述】:
我正在制作一个每个用户都可以添加到他的待办事项列表的应用程序,我的文件夹路径有问题。 这是读取数据代码的一部分,添加“child(auth.currentUser?.uid!!)”会使一切崩溃。没有它虽然它可以工作,但会以字典形式显示所有用户的信息。
db.child(auth.currentUser?.uid!!).addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
println("The read failed")
}
override fun onDataChange(p0: DataSnapshot) {
for (i in p0.children) {
val notToDo: String = i.value.toString()
notToDos.add(notToDo)
}
listView = findViewById(R.id.listview)
listView.adapter = ArrayAdapter<String>(
this@ToDoActivity,
R.layout.listview,
notToDos
)
}
})
这是整个代码,但添加部分都不起作用
package ge.msda.firebaseauth
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.activity_to_do.*
class ToDoActivity : AppCompatActivity() {
private lateinit var db: DatabaseReference
lateinit var listView: ListView
private lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_to_do)
db = FirebaseDatabase.getInstance().getReference("UserInfo")
val notToDos = arrayListOf<String>()
TodoSubmit.setOnClickListener {
val text = TodoText.text.toString()
db.child(auth.currentUser?.uid!!).child("ToDos").push().setValue(text).addOnCompleteListener {
if(it.isSuccessful()){
Toast.makeText(this, "Success", Toast.LENGTH_LONG).show()
}
else {
Toast.makeText(this, it.exception.toString(), Toast.LENGTH_LONG).show() }
}
TodoText.setText("")
notToDos.clear()
}
db.child(auth.currentUser?.uid!!).addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
println("The read failed")
}
override fun onDataChange(p0: DataSnapshot) {
for (i in p0.children) {
val notToDo: String = i.value.toString()
notToDos.add(notToDo)
}
listView = findViewById(R.id.listview)
listView.adapter = ArrayAdapter<String>(
this@ToDoActivity,
R.layout.listview,
notToDos
)
}
})
}
}
错误跟踪
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ge.msda.firebaseauth, PID: 11939
java.lang.RuntimeException: Unable to start activity ComponentInfo{ge.msda.firebaseauth/ge.msda.firebaseauth.ToDoActivity}: kotlin.UninitializedPropertyAccessException: lateinit property auth has not been initialized
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property auth has not been initialized
at ge.msda.firebaseauth.ToDoActivity.onCreate(ToDoActivity.kt:41)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
【问题讨论】:
-
如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。
-
您在哪一行代码中遇到了该错误?
-
db.child(auth.currentUser?.uid!!).addValueEventListener 如果我在这里删除 child(auth.currentUser?.uid!!) 它工作正常(但它没有做我想要的)但它崩溃了。
标签: android firebase kotlin firebase-realtime-database