You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArrayList的ArrayList中正确添加Firebase经纬度数据?

问题解决:Firebase经纬度存入嵌套ArrayList数据重复

问题原因

你当前的核心问题是重复复用了同一个longitudes ArrayList对象。由于ArrayList是引用类型,你每次循环只是往这个对象里追加新的经纬度值,再将这个对象的引用添加到外层aList中。这导致外层列表里的所有子列表实际上指向同一个内存地址的对象,最终所有子列表都会显示成最后一次循环结束后的完整数据,同时数据会持续累积。

解决方案

修改思路很简单:每次循环内部新建独立的子ArrayList,确保每个用户的经纬度都存储在单独的对象中,同时每次数据更新时清空外层列表避免旧数据残留。

修改后的完整代码

初始化部分

// 仅需初始化外层嵌套列表
ArrayList<ArrayList<String>> aList = new ArrayList<>();

Firebase数据监听部分

databaseReference.child("hospital").addValueEventListener(new ValueEventListener() {
    @SuppressLint("SetTextI18n")
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        // 每次数据更新时,先清空外层列表,避免旧数据残留
        aList.clear();
        
        for (DataSnapshot snapshot1 : snapshot.getChildren()) {
            // 每次循环新建独立的子ArrayList,存储当前用户的经纬度
            ArrayList<String> userLocation = new ArrayList<>();
            userLocation.add(snapshot1.child("longitude").getValue().toString());
            userLocation.add(snapshot1.child("latitude").getValue().toString());
            // 将独立的子列表添加到外层列表
            aList.add(userLocation);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 可选:添加错误日志,便于调试
        Log.e("FirebaseError", "数据获取失败:" + error.getMessage());
    }
});

关键修改点

  1. 移除了循环外的longitudes变量,改为在循环内部创建userLocation子ArrayList,确保每个用户的位置数据都存储在独立的对象中,不会互相覆盖。
  2. 每次onDataChange触发时清空aList,防止多次数据更新导致列表积累旧数据。
  3. 去掉了冗余的count变量,直接使用aList.add(userLocation)将子列表追加到外层列表末尾,逻辑更简洁直观。

内容的提问来源于stack exchange,提问作者rushi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:24:26