【发布时间】: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