Android Firebase,只需获取一个子对象的数据

我一直在寻找一种方法在Android Firebase中获取一个子对象的数据。

我已经find像Firebase检索子Android的东西。 所有的解决scheme都build议使用“ChildEventListener”,但是我现在需要获取这些数据,而不是在移动,删除,更新等情况下。

我的数据作为string保存在https://.firebaseio.com/users//creation中。 我觉得必须有一些简单的方法来访问,而不需要做太多,因为如果我将确切的URL复制到我的浏览器,我可以看到:'创build:“2015/05/31 21:33:55”'就在我的“Firebase Forge仪表板”中。

如果有人知道如何访问这个没有听众的变化,将不胜感激!

谢谢!

Firebase侦听器会触发初始数据和所有更改。

如果您想要同步集合中的数据,请使用ChildEventListener 。 如果您想要同步一个对象,请使用ValueEventListener 。 请注意,在这两种情况下,您都不会“获取”数据。 您正在同步它,这意味着callback可能会被调用多次:对于初始数据和数据更新。

这在Firebase的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指南”可能是一个很好的下一个目的地,特别是针对此问题: https : //firebase.google.com/docs/database/android/read-and-write

你不直接读取一个值。 您可以使用.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

只是获取特定的节点数据,其工作完美的我

 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()); } }); 

我以这种方式存储我的数据:

 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) { } });