Intereting Posts
Служба специальных возможностей не связана после обновления приложения Кинжал не создает компоненты для / тестового класса Руководство для выбора между AsyncTaskLoader и AsyncTask для использования в фрагменте Https Connection Android Преобразование целочисленных дат / времени в временную метку unix в Java? Ручная установка файлов на SD-карту эмулятора Android Отключение воспроизведения видео с помощью VideoView в приложении для Android FindViewById возвращает NULL при использовании фрагмента Как получить выбранное значение оси x с помощью MPAndroidChart? Как перенаправить пользователя в конкретное приложение на рынке? Прозрачная строка состояния охватывает режим действия на Kitkat Отключите разъем Bluetooth в Android Facebook SDK на Android: переопределить или скрыть диалог выполнения при входе в систему Как исключить транзитивные зависимости другого подпроекта в сборках мультипроектов? Использование класса EffectFactory в растровом изображении – Android

Могу ли я получить значение без использования прослушивателей событий в firebase на Android?

Я делаю приложение для Android, используя новую версию базы данных Google Firebase Realtime.

Я получаю свои данные с помощью ValueEventListener и ChildEventListener, когда данные изменяются / добавляются / удаляются / перемещаются и т. Д.

Теперь у меня проблема.

Мои данные:

"user 1": { "name":"abc" } 

И у меня есть кнопка, названная «getName».

Я хочу получить значение «имя» в данных пользователя 1, когда я нажал кнопку getName.

  getName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bla bla.. } }); 

Является ли это возможным? Могу ли я получить значение без использования слушателей?

Im ждет ваших помощи. Спасибо.

Solutions Collecting From Web of "Могу ли я получить значение без использования прослушивателей событий в firebase на Android?"

Да, вы можете это сделать, используя addListenerForSingleValueEvent . Это будет извлекать значение только один раз, в отличие от ValueEventListener и ChildEventListener . Таким образом, ваш код будет выглядеть примерно так,

 getName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ref.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { // do some stuff once } @Override public void onCancelled(FirebaseError firebaseError) { } }); 

На самом деле это не изменится каждый раз, когда вы меняете данные, и это, вероятно, вызовет все ваши действия, которые довольно бесполезны, я даже не знаю, почему они сделали это именно так. Waiste of time.

Взгляните на структуру API задач :

 @Override public void onClick(View view) { getUser(); } private Task<User> getUser(String id) { final TaskCompletionSource<User> tcs = new TaskCompletionSource(); ref.child("users") .child(id) .addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onCancelled(FirebaseError error) { tcs.setException(error.toException()); } @Override public void onDataChange(DataSnapshot snapshot) { tcs.setResult(snapshot.getValue(User.class)); } }); return tcs.getTask(); }