如何一次将从 Firebase 检索到的数据存储在 ArrayList<String> 中?

Posted

技术标签:

【中文标题】如何一次将从 Firebase 检索到的数据存储在 ArrayList<String> 中?【英文标题】:How to store data retrieved from Firebase in an ArrayList<String> all at once? 【发布时间】:2017-06-06 05:11:34 【问题描述】:

我在数据库中有一些相同引用下的数据,我正在尝试将其存储在 ArrayList&lt;String&gt; 中。

方法如下:

    mDatabase.child("child").child(uid).addChildEventListener(new ChildEventListener() 
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) 

            if (dataSnapshot.getValue() != null)
               ids.add(dataSnapshot.getValue().toString());
               Log.d("ids", ids.toString());
             else 
                Toast.makeText(getBaseContext(), "No data!", Toast.LENGTH_SHORT).show();
            

        
        ...
        ...
    );

引用 mDatabase.child("child").child(uid)... 中存储了 2 个密钥,它们像这样一个接一个地存储在 ids 中:

D/ids: [-Kayr_ENTy4QZQKn3Bgx]
D/ids: [-Kayr_ENTy4QZQKn3Bgx, -KaywN_5pTOrB0ooBIC3]

我想知道的是如何让它们在ids 中一次性添加而不是一个一个添加?

更新 1:-

数据结构是这样的:

-app
  -child
    -uid
      -1484967071: -Kayr_ENTy4QZQKn3Bgx
      -1484967222: -KaywN_5pTOrB0ooBIC3

按照cartant 的建议,使用valueEventListener() 会导致检索到:

D/ids: [1484967222=-KaywN_5pTOrB0ooBIC3, 1484967071=-Kayr_ENTy4QZQKn3Bgx]

虽然我只想要密钥,它们是 -KaywN_5pTOrB0ooBIC3-Kayr_ENTy4QZQKn3Bgx

【问题讨论】:

你说你想要钥匙,但在你的例子中,你指出了价值观。在上面的数据结构中,键是 1484967071 和 1484967222,值是“-Kayr_ENTy4QZQKn3Bgx”和“-KaywN_5pTOrB0ooBIC3”。你真的想要键还是值? @DougStevenson by keys 我的意思是字符串 -KaywN_5pTOrB0ooBIC3 而这个 -Kayr_ENTy4QZQKn3Bgx 不是来自 key:value 对的键。抱歉,造成混乱。 我认为给定的答案应该适合你。确保您获取的是迭代子快照的值,而不是传递给 onDataChange() 的快照。 【参考方案1】:

如果您希望将整个快照传递给侦听器,请使用addValueEventListeneraddListenerForSingleValueEvent

如果您使用addValueEventListener,将使用初始快照调用侦听器,并在数据库更改时再次调用。

如果你使用addListenerForSingleValueEvent,监听器只会在初始快照中被调用一次。

侦听器收到的快照将包括所有孩子。要迭代它们,您可以执行以下操作:

@Override
public void onDataChange(DataSnapshot snapshot) 
    ArrayList<String> ids = new ArrayList<String>();
    for (DataSnapshot childSnapshot: snapshot.getChildren()) 
        ids.add(childSnapshot.getValue().toString());
    

【讨论】:

感谢carant ...虽然它没有解决我的问题,但它给了我一些提示!在这里也需要你和@FrankvanPuffelen 的帮助:***.com/q/41710448/6144372 请:)

以上是关于如何一次将从 Firebase 检索到的数据存储在 ArrayList<String> 中?的主要内容,如果未能解决你的问题,请参考以下文章

将从表单检索到的数组数据存储到数据库

如何从从 Firebase 检索信息的闭包中传递数据?

如何将从表单提交中检索到的参数作为参数传递给 django 中的函数

如何将从 json 检索到的数据从一个视图传递到另一个视图? [复制]

一次将多个图像上传到 Firebase

如何将从 ms 访问表中检索到的记录插入到 sql server 表中?