Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么不将FirebaseDatabase引用中的所有数据添加到ArrayList中<;字符串>;?_Android_Arraylist_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 为什么不将FirebaseDatabase引用中的所有数据添加到ArrayList中<;字符串>;?

Android 为什么不将FirebaseDatabase引用中的所有数据添加到ArrayList中<;字符串>;?,android,arraylist,firebase,firebase-realtime-database,Android,Arraylist,Firebase,Firebase Realtime Database,我正在从一个特定的FirebaseDatabase引用中检索一些数据,并试图将其添加到ArrayList中,但由于没有一个接一个地添加这些数据,因此出现了一些奇怪的情况 在onCreate()中的某处 以下是要注销的内容: D/pA: [value1] D/pA: [value2] D/pA: [value3] 我试图删除如果(pA!=null){pA.clear();},但后来我得到了以下日志: D/pA: [value1, value1, value2, value1, value2, v

我正在从一个特定的
FirebaseDatabase
引用中检索一些数据,并试图将其添加到
ArrayList
中,但由于没有一个接一个地添加这些数据,因此出现了一些奇怪的情况

onCreate()中的某处

以下是要注销的内容:

D/pA: [value1]
D/pA: [value2]
D/pA: [value3]
我试图删除
如果(pA!=null){pA.clear();}
,但后来我得到了以下日志:

D/pA: [value1, value1, value2, value1, value2, value3]
我想要的是:

D/pA: [value1, value2, value3]

请让我知道这里出了什么问题,以及如何实现上述给定结果?

firebase中值侦听器的工作方式,特别是您使用它的方式,如果将一个子节点添加到您正在侦听的节点,您将再次接收所有子节点。这就是为什么如果不清除arraylist,会得到value1、value1、value2、value1、value2、value3。首先添加value1,然后当value2添加到firebase时,您的侦听器将收到一个同时包含这两个值的对象

此方法在附加侦听器时触发一次,在每次数据(包括子项)更改时触发一次。事件回调传递一个快照,其中包含该位置的所有数据,包括子数据。

解决方案

在不更改太多代码的情况下修复此问题的最简单方法是在for循环之外清除pA。这样,每次触发事件时,您将获得当前存在的所有“pA”:s

if (dataSnapshot.getValue() != null) {
        if (pA != null){ 
            pA.clear();
        }
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
 .
 .
 .

数组列表在代码中的什么位置?什么是pA?@MrunalAhirrao
pA
是arraylist。请查看更新的问题。@cricket_007请帮助解决此问题您是否尝试将
if(pA!=null){pA.clear();}
移动到
for
循环之前(之外)?
D/pA: [value1, value1, value2, value1, value2, value3]
D/pA: [value1, value2, value3]
if (dataSnapshot.getValue() != null) {
        if (pA != null){ 
            pA.clear();
        }
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
 .
 .
 .