Firebase从addListenerForSingleValueEvent返回检索到的值

时间:2017-03-16 14:08:15

标签: android firebase firebase-realtime-database

我是 Firebase 的新手,我从 Firebase 的文档中学到的是,如果您想要在使用后立即检索数据{ {1}}。

我的问题是将其集成到我的代码中。 我有这样的数据结构:

enter image description here

现在我想在 16032017 下添加一个新对象。为此,我必须执行以下步骤:

  1. 首先,我必须查看 16032017 是否存在
  2. 我必须看看它有多少孩子(在这个例子中为3)
  3. 获得儿童金额后,我将使用键3创建一个新的子节点并插入我的数据值对,这是一个像这样的对象:

    addListenerForSingleValueEvent
  4. 使用其他数据库,这将非常简单。我会按照我描述的顺序完全实现它。首先读取数据并返回值,然后使用该值插入新数据。但我无法通过 Firebase 找到解决方法。因为在 Firebase 中,首先我必须使用public class StimmungAbfrage { public Integer Angespannt ; public Integer Motiviert; } 来读取子节点的数量。我写了这样的代码:

    addListenerForSingleValueEvent

    但问题是我无法获得URL url = new URL(DAL_Utilities.DatabaseURL + "players/" + user.getName() + "/Stimmungsabfrage/" + stimmungAbfrage.Date + "/"); Firebase root = new Firebase(url.toString()); root.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { long counter = 1; counter = dataSnapshot.getChildrenCount(); } @Override public void onCancelled(FirebaseError firebaseError) { Log.d("DAL_User.GetLTSabfrage",firebaseError.getMessage()); } }); 的值,因为它是counter。因此,无法返回数据以在插入过程的另一个函数中使用它。 然后我尝试在void中进行阅读和插入事务。但这也是不可能的,因为我无法找到将数据传递给此函数的方法,我想在数据库中插入。此函数也无法访问实现onDataChange的主类的数据,除非我将所有变量设为全局,这不是正确的方法。 那么如何使用 Firebase

    实现这个简单的读写过程

1 个答案:

答案 0 :(得分:0)

   ref.child("16032017").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                   for (DataSnapshot postSnapshot : snapshot.getChildren()) {


                       StimmungAbfrage stim = postSnapshot.getValue(StimmungAbfrage.class);


                       String string = " Angespannt: "+stim.get Angespannt()+"\nMotiviert: "+stim.getMotiviert();


                       textView.setText(string);
                   }
                }});