Android Firebase, просто получите данные одного дочернего объекта
Я искал способ получить данные одного дочернего объекта в Android Firebase.
Я нашел такие вещи, как Firebase получить дочерний Android. Все решения предлагают использовать "ChildEventListener", однако мне нужно получить эти данные в данный момент, а не когда они будут перемещены, удалены, обновлены и т.д.
Мои данные хранятся в https://.firebaseio.com/users//creation как строка. Я считаю, что должен быть какой-то простой способ получить доступ к этому без необходимости делать слишком много, потому что, если я скопирую точный URL-адрес в мой браузер, я могу увидеть: "создание:" 2015/05/31 21:33:55 "' прямо в моей" Firebase Forge Dashboard".
Если кто-то знает, как получить доступ к этому без слушателя для изменения, которое было бы оценено!
Спасибо!
Ответы
Ответ 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) { }
});