Подтвердить что ты не робот

Android Firebase, просто получите данные одного дочернего объекта

Я искал способ получить данные одного дочернего объекта в Android Firebase.

Я нашел такие вещи, как Firebase получить дочерний Android. Все решения предлагают использовать "ChildEventListener", однако мне нужно получить эти данные в данный момент, а не когда они будут перемещены, удалены, обновлены и т.д.

Мои данные хранятся в https://.firebaseio.com/users//creation как строка. Я считаю, что должен быть какой-то простой способ получить доступ к этому без необходимости делать слишком много, потому что, если я скопирую точный URL-адрес в мой браузер, я могу увидеть: "создание:" 2015/05/31 21:33:55 "' прямо в моей" Firebase Forge Dashboard".

Если кто-то знает, как получить доступ к этому без слушателя для изменения, которое было бы оценено!

Спасибо!

4b9b3361

Ответ 1

Слушатели Firebase запускают как исходные данные, так и любые изменения.

Если вы хотите синхронизировать данные в коллекции, используйте ChildEventListener. Если вы хотите синхронизировать один объект, используйте ValueEventListener. Обратите внимание, что в обоих случаях вы не получаете данные. Вы синхронизируете его, что означает, что обратный вызов может вызываться несколько раз: для исходных данных и всякий раз, когда данные обновляются.

Это описано в Firestase для быстрого запуска для Android. Соответствующий код и цитата:

FirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    System.out.println(snapshot.getValue());  //prints "Do you have data? You'll love Firebase."
  }
  @Override
  public void onCancelled(DatabaseError databaseError) {        
  }
});

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

Проведите несколько минут, чтобы пройти этот быстрый старт. Это не должно занимать более 15 минут, и это избавит вас от большого количества царапин и вопросов. Firebase Android Guide, вероятно, является хорошим следующим назначением, специально для этого вопроса: https://firebase.google.com/docs/database/android/read-and-write

Ответ 2

Вы прямо не читаете значение. Вы можете установить его с помощью .setValue(), но в ссылочном объекте нет .getValue().

Вы должны использовать прослушиватель. Если вы просто хотите прочитать значение один раз, вы используете ref.addListenerForSingleValueEvent().

Пример:

Firebase ref = new Firebase("YOUR-URL-HERE/PATH/TO/YOUR/STUFF");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
       String value = (String) dataSnapshot.getValue();

       // do your stuff here with value

   }

   @Override
   public void onCancelled(FirebaseError firebaseError) {

   }
});

Источник: https://www.firebase.com/docs/android/guide/retrieving-data.html#section-reading-once

Ответ 3

просто выберите конкретные данные node и его работа идеально подходит для меня

mFirebaseInstance.getReference("yourNodeName").getRef().addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {


        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
            Log.e(TAG, "======="+postSnapshot.child("email").getValue());
            Log.e(TAG, "======="+postSnapshot.child("name").getValue());
        }
    }

    @Override
    public void onCancelled(DatabaseError error) {
        // Failed to read value
        Log.e(TAG, "Failed to read app title value.", error.toException());
    }
});

Ответ 4

Я храню данные таким образом:

accountsTable ->
  key1 -> account1
  key2 -> account2

чтобы получить данные объекта:

accountsDb = mDatabase.child("accountsTable");

accountsDb.child("some   key").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {

                    try{

                        Account account  = snapshot.getChildren().iterator().next()
                                  .getValue(Account.class);


                    } catch (Throwable e) {
                        MyLogger.error(this, "onCreate eror", e);
                    }
                }
                @Override public void onCancelled(DatabaseError error) { }
            });