【问题标题】:Cant create a new path inside userid folder in Firebase Database无法在 Firebase 数据库的用户 ID 文件夹中创建新路径
【发布时间】: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)

这是数据库的样子,我想在每个名为“ToDos”的用户中添加一个新文件夹,我可以在其中添加其他项目。

【问题讨论】:

  • 如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。
  • 您在哪一行代码中遇到了该错误?
  • db.child(auth.currentUser?.uid!!).addValueEventListener 如果我在这里删除 child(auth.currentUser?.uid!!) 它工作正常(但它没有做我想要的)但它崩溃了。

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

您收到该错误是因为您忘记初始化 auth 对象。要解决这个问题,只需添加以下代码行:

auth = FirebaseAuth.getInstance()

就在以下代码行之后:

db = FirebaseDatabase.getInstance().getReference("UserInfo")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多