【问题标题】:Able to Authenticate user in Firebase authentication but could not able to store data in Firebase database能够在 Firebase 身份验证中对用户进行身份验证,但无法将数据存储在 Firebase 数据库中
【发布时间】:2018-06-20 23:53:09
【问题描述】:

我能够通过 Firebase 身份验证对用户进行身份验证,但无法将数据存储在 Firebase 数据库中。我在 logcat 中没有收到任何错误。我没有更改 Firebase 数据库中的任何规则。我的规则设置为默认值。这是我的代码:

fun authenticateUser(){
    Observable.create(ObservableOnSubscribe<Task<AuthResult>>{
        e: ObservableEmitter<Task<AuthResult>> -> run {
        try {
            firebaseAuth.createUserWithEmailAndPassword(email!!, password!!)
                    .addOnCompleteListener(this, object : OnCompleteListener<AuthResult> {
                        override fun onComplete(p0: Task<AuthResult>) {
                            e.onNext(p0)
                            e.onComplete()
                        }
                    })
        }
        catch (ex : Exception){
            dialogs?.dismiss()
            displayMessage("network problem..")
            e.onError(ex)
        }
    }
    }).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<Task<AuthResult>>{
                override fun onError(e: Throwable) {
                    e.printStackTrace()
                }

                override fun onNext(t: Task<AuthResult>) {
                    if (t.isSuccessful) {
                        storeData()
                    }
                    else if (!t.isSuccessful){
                        dialogs?.dismiss()
                        displayMessage("some issues has came..")
                    }
                }
                override fun onComplete() {
                }

                override fun onSubscribe(d: Disposable) {
                    compositeDisposable?.add(d)
                }
            })
}

override fun storeData() {
    var currentUser = firebaseAuth.currentUser
    val databaseReference = firebaseDatabase.reference.child("Users_Information").child(currentUser?.uid)
    val data = HashMap<String,String>()
    data.put("name",nameString!!)
    data.put("email_address",emailString!!)
    data.put("image","def")
    data.put("thumb_image","def")

    databaseReference.setValue(data).addOnCompleteListener {
        task -> if (task.isSuccessful){
                dialogs?.dismiss()
                displayMessage("user is created")
                goToNextActivity()
        }
        else if (!task.isSuccessful){
        dialogs?.dismiss()
        displayMessage("Authentication failed, try again later")
     }
        else if (task.isComplete){
        displayMessage("data not stored")
     }
    }
}

override fun goToNextActivity() {
    var intents = Intent(this,MainActivity::class.java)
    intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
     intents.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
    startActivity(intents)
    finish()
}

正在生成 Uid,但数据未存储在 Firebase 数据库中。我调试了代码,但没有发现任何问题。问题出在哪里,请帮忙...

【问题讨论】:

  • Firebase 已经异步运行了,为什么还要使用 Observable?
  • @KemalTürk 我也试过没有观察到但也遇到了同样的问题..
  • 你可以试试ValueEventListener而不是addOnCompleteListener。或者你可以试试POJO类而不是HashMap。或者你可以试试数据库规则true。
  • @KemalTürk setValue() 方法没有这样的监听器,我认为 ValueEventListener 用于从数据库中读取数据。我在更改规则后也尝试过,但没有找到任何解决方案。我的问题仍然存在。
  • “Users_Information”中是否有子 currentUser.uid 但数据未存储?

标签: android firebase firebase-realtime-database kotlin rx-java2


【解决方案1】:

尝试将 Firebaseuser 发送到 storeData() 并尝试在 storeData() 中记录 Firebaseuser

override fun onNext(t: Task<AuthResult>) {
                if (t.isSuccessful) {
                    Log.d("FB user", t.getResult().getUser())
                    storeData(t.getResult().getUser())
                }
                else if (!t.isSuccessful){
                    dialogs?.dismiss()
                    displayMessage("some issues has came..")
                }
            }

....
..

  override fun storeData(curentUser: Firebaseuser) {
      Log.d("FB user", currentUser?.uid)
      val databaseReference = firebaseDatabase.reference.child("Users_Information").child(currentUser?.uid)
...
..

 }

【讨论】:

  • 你在 storeData() 中的 Log.d("FB user", currentUser?.uid) 中看到正确的 uid 了吗?
  • 可能是 child(currentUser?.uid) 存在于 child("Users_Information") Firebase 不保存数据。尝试删除。
  • 是的,我看到了正确的 uid.. 现在我将尝试删除 firebase 并将其添加回来.. 我希望它会起作用..
  • 没有任何工作,尽一切努力使其工作,但没有找到任何解决方案。我尝试删除 Firebase 并重新配置它,但这对我也不起作用..现在我将 Firebase 升级到 11.8.0 但仍然遇到同样的问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2020-10-22
  • 2017-03-11
相关资源
最近更新 更多