WedX - журнал о программировании и компьютерных науках

Может аутентифицировать пользователя в аутентификации Firebase, но не может хранить данные в базе данных Firebase

Я могу аутентифицировать пользователя с помощью аутентификации 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? 11.01.2018
  • @KemalTürk я тоже пробовал без наблюдения, но получаю ту же проблему .. 11.01.2018
  • Вы можете попробовать ValueEventListener вместо addOnCompleteListener. Или вы можете попробовать класс POJO вместо HashMap. Или вы можете попробовать правила базы данных true. 12.01.2018
  • @KemalTürk Нет такого прослушивателя с методом setValue (), и я думаю, что ValueEventListener используется для чтения данных из базы данных. Я также пытался после изменения правил, но не нашел решения. Моя проблема все еще сохраняется. 12.01.2018
  • У вас есть дочерний элемент currentUser.uid в Users_Information, но данные не сохраняются? 12.01.2018
  • @eurosecom да, у меня есть, firebaseDatabase.reference.child(Users_Information).child(currentUser?.uid) 12.01.2018
  • Я использую setValue(user), где user = new User(xxx, xxx,xxx) я не использую val data = HashMap... как в setValueAsync(users); 12.01.2018
  • @eurosecom Нет, все еще не работает .. я только что попробовал, как вы сказали, я все еще могу пройти аутентификацию, но мои данные все еще не сохраняются .. 12.01.2018
  • Вы получили displayMessage (данные не сохранены)? 12.01.2018
  • Попробуйте вызвать setValue(user) без прослушивателя и проверьте своего ребенка‌​(currentUser?.uid) в консоли Firebase. 12.01.2018
  • @eurosecom Нет, я не получил displayMessage (данные не сохранены), моя диалоговая панель продолжает отображаться. ничего не произошло. я просто получаю всплывающее уведомление о ключе аутентификации. Теперь я чувствую, что моя ссылка на данные неверна, поэтому она не работает. 12.01.2018
  • Похоже, ваш ObservableEmitter не излучает onNext. 12.01.2018
  • @eurosecom Сейчас я пробовал без слушателя, но моя проблема все еще не устранена .. 12.01.2018
  • @eurosecom Похоже, что ваш ObservableEmitter не излучает onNext Noo, этого не может быть, если это так, то я не получу всплывающее сообщение о моем ключе аутентификации .. 12.01.2018
  • Вы вызываете createUserWithEmailAndPassword с тем же адресом электронной почты!!, пароль!! ? 12.01.2018
  • @eurosecom да.. 12.01.2018
  • Если идентификатор пользователя существует, попробуйте вызвать mAuth.signInWithEmailAndPassword(email, password)... 12.01.2018
  • @eurosecom да, я могу войти в систему с помощью электронной почты и пароля, но проблема все та же .. 12.01.2018

Ответы:


1

Попробуйте отправить Firebaseuser в storeData() и попробуйте зарегистрировать Firebaseuser в storeData().

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)
...
..

 }
12.01.2018
  • Видите ли вы правильный uid в Log.d(пользователь FB, currentUser?.uid) в storeData() ? 12.01.2018
  • Может быть, если дочерний элемент (currentUser?.uid) существует в дочернем элементе (Users_Information), Firebase не сохраняет данные. Попробуйте удалить. 12.01.2018
  • да я увидел правильный uid..сейчас попробую убрать firebase и добавить обратно..надеюсь получится.. 13.01.2018
  • Нет, ничего не работает, сделал все, чтобы заставить его работать, но не нашел никакого решения. Я попытался удалить Firebase и снова настроить его, но это также не сработало для меня. Теперь я обновляю свою Firebase до 11.8.0, но все еще имею ту же проблему... 14.01.2018
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]