为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2022-05-25 10:52:51
我正在使用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 0D/RefFromMain: Size is 0D/RefFromMain: Size is 0D/RefFromMain: Size is 0onDataChange 方法中的 Log.d()。D/ArraySize: Size is 4D/ArraySize: Size is 5D/ArraySize: Size is 6D/ArraySize: Size is 10
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

 allLocations = new ArrayList<>();

 Log.d(TAG , "Size is " + allLocations.size());

里面还什么都没有。因此它的大小为零。


后来你在里面放了一些东西:


          allLocations.add(newUt);

        }

        Log.d("ArraySize" , "Size is " + allLocations.size());

现在它的大小增加了(根据前面的 for 循环增加了一些元素)


查看完整回答
反对 回复 2022-05-25
?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

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



查看完整回答
反对 回复 2022-05-25
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

首先,您正在初始化您的 Arraylist。这里


 allLocations = new ArrayList<>();

    Log.d(TAG , "Size is " + allLocations.size());

所以它用空数据初始化。里面什么都没有。之后,addValueEventListener您将向allLocationsArrayList 添加数据。


 myRef.addValueEventListener(new ValueEventListener() {


        @Override

        public void onDataChange(DataSnapshot dataSnapshot) {

            allLocations.clear();

            for (DataSnapshot allLocs : dataSnapshot.getChildren()) {

                Utilities newUt = allLocs.getValue(Utilities.class);

              allLocations.add(newUt);

            }

所以现在它有值了。


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号