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

26h*_*mkk 49 android firebase firebase-realtime-database

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

我发现Firebase检索Android的东西.所有解决方案都建议使用"ChildEventListener",但是我需要在此时获取此数据,而不是在移动,删除,更新等时获取此数据.

我的数据以字符串形式保存在https://.firebaseio.com/users//creation中.我认为必须有一些简单的方法来访问它而不需要做太多,因为如果我将确切的URL复制到我的浏览器,我可以看到:'创建:"2015/05/31 21:33:55"'就在我的"Firebase Forge Dashboard"中.

如何在没有听众的情况下访问它?

Fra*_*len 58

Firebase侦听器会触发初始数据和任何更改.

如果您要同步集合中的数据,请使用ChildEventListener.如果您要同步单个对象,请使用ValueEventListener.请注意,在这两种情况下,您都没有"获取"数据.您正在同步它,这意味着可以多次调用回调:初始数据和数据更新时.

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) {        
  }
});
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,value事件将针对数据的初始状态触发一次,然后每次该数据的值发生更改时再触发一次.

请花一点时间来完成快速入门.它不应该超过15分钟,它将为您节省大量的头脑和问题.在火力地堡的Android指南可能是一个很好的下一个目的地,对于这个问题,具体如下:https://firebase.google.com/docs/database/android/read-and-write

  • Android Firebase SDK 中存在一个错误,强制您监听所有子事件,例如 childAdded、childDeleted、childChanged 和 childMoved。在 iOS 和 Web Firebase SDK 中,您可以侦听特定的子事件,例如仅添加子事件。强制监听所有事件意味着您的账单中下载数据的费用最高。希望 Android 团队修复这个限制并与其他平台保持一致。 (2认同)

len*_*ooh 22

您不直接读取值.您可以使用它进行设置.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) {

   }
});
Run Code Online (Sandbox Code Playgroud)

资料来源:https://www.firebase.com/docs/android/guide/retrieving-data.html#section-reading-once

  • 这是更具体地回答问题的响应,因为没有简单的一行代码方法只需一次检索firebase数据库中的一些数据,如'.getValue()'.然后它会告诉你如何使用引用".addListenerForSingleValueEvent".注意'FirebaseError'已被折旧为更通用的'DatabaseError'. (2认同)

bat*_*l.g 11

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

accountsTable ->
  key1 -> account1
  key2 -> account2
Run Code Online (Sandbox Code Playgroud)

为了获得对象数据:

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) { }
            });
Run Code Online (Sandbox Code Playgroud)


tej*_*hah 11

只需获取特定的节点数据,它的工作对我来说非常完美

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());
    }
});
Run Code Online (Sandbox Code Playgroud)