为什么我的 ArrayList 在从 main 方法记录时显示大小为零

我正在使用firebase创建一个自动售货机程序,每次在firebase中更新一个值时,它都会被提取到类“NewUt”并添加到ArrayList“allLocations”中。我在onCreate方法中有Log.d()打印数据更新时数组的大小和 onDataChange 方法中的另一个 Log.d()。onCreate 中的 Log.d() 显示 Array 的大小为 0,但 onDataChange 方法中的 Log.d() 显示的大小大于零。可能是什么问题呢?

我试图将 onDataChange 放在不同的方法中,但结果仍然相同。

onCreate 方法中的 Log.d()。


D/RefFromMain: Size is 0

D/RefFromMain: Size is 0

D/RefFromMain: Size is 0

D/RefFromMain: Size is 0

onDataChange 方法中的 Log.d()。


D/ArraySize: Size is 4

D/ArraySize: Size is 5

D/ArraySize: Size is 6

D/ArraySize: Size is 10


慕田峪4524236
浏览 147回答 3
3回答

弑天下

&nbsp;allLocations = new ArrayList<>();&nbsp;Log.d(TAG , "Size is " + allLocations.size());里面还什么都没有。因此它的大小为零。后来你在里面放了一些东西:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allLocations.add(newUt);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; Log.d("ArraySize" , "Size is " + allLocations.size());现在它的大小增加了(根据前面的 for 循环增加了一些元素)

慕田峪9158850

您在分配后将数组大小记录在 main 中。所以它是0。但是onDataChange你已经把数据放在那个数组中了allLocations.add(newUt);。所以它显示的大小等于插入其中的数据数量。

慕尼黑8549860

首先,您正在初始化您的 Arraylist。这里&nbsp;allLocations = new ArrayList<>();&nbsp; &nbsp; Log.d(TAG , "Size is " + allLocations.size());所以它用空数据初始化。里面什么都没有。之后,addValueEventListener您将向allLocationsArrayList 添加数据。&nbsp;myRef.addValueEventListener(new ValueEventListener() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onDataChange(DataSnapshot dataSnapshot) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allLocations.clear();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (DataSnapshot allLocs : dataSnapshot.getChildren()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Utilities newUt = allLocs.getValue(Utilities.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allLocations.add(newUt);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }所以现在它有值了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java