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

如何在Android ListView中从Firebase实时数据库获取数据?

Android从Firebase实时数据库读取数据并在ListView展示

1. 配置Firebase依赖

在Module级别的build.gradle中添加Firebase实时数据库依赖:

implementation 'com.google.firebase:firebase-database:20.0.5'

2. 创建数据模型类

对应Firebase中的数据结构,创建ToolGroup类:

public class ToolGroup {
    private List<String> 工具名称;
    private String 状态;

    // Firebase序列化需要空构造函数
    public ToolGroup() {}

    public List<String> get工具名称() {
        return 工具名称;
    }

    public String get状态() {
        return 状态;
    }
}

3. 读取数据并绑定ListView

在Activity中实现数据读取与ListView展示逻辑:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView toolListView = findViewById(R.id.tool_list_view);
        List<String> displayList = new ArrayList<>();

        // 获取Firebase数据库引用
        DatabaseReference toolsRef = FirebaseDatabase.getInstance().getReference("tools");

        toolsRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                // 遍历tools下的所有动态键节点
                for (DataSnapshot groupSnapshot : snapshot.getChildren()) {
                    ToolGroup toolGroup = groupSnapshot.getValue(ToolGroup.class);
                    if (toolGroup == null) continue;

                    // 转换状态为中文并添加标题
                    String status = toolGroup.get状态().equals("damage") ? "*损坏*" : toolGroup.get状态();
                    displayList.add(status);

                    // 转换工具名称为中文并添加到列表
                    List<String> toolNames = toolGroup.get工具名称();
                    if (toolNames != null) {
                        for (String name : toolNames) {
                            displayList.add(translateTool(name));
                        }
                    }
                }

                // 设置ListView适配器
                ArrayAdapter<String> adapter = new ArrayAdapter<>(
                        MainActivity.this,
                        android.R.layout.simple_list_item_1,
                        displayList
                );
                toolListView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Toast.makeText(MainActivity.this, "数据读取失败:" + error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    // 工具名称翻译方法
    private String translateTool(String originalName) {
        return switch (originalName.toLowerCase()) {
            case "ampere meter" -> "电流表";
            case "multimeter" -> "万用表";
            case "wrench" -> "扳手";
            case "manometer" -> "压力表";
            case "computer" -> "电脑";
            case "mistar" -> "米斯塔";
            default -> originalName;
        };
    }
}

4. 布局文件(activity_main.xml)

添加ListView组件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/tool_list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

注意事项

  • 确保Firebase实时数据库的读取权限配置正确(开发阶段可临时设置为公开权限,上线后需调整为安全规则)
  • 若需要给标题(如“损坏”)设置加粗样式,可自定义ListView的Item布局,通过适配器区分标题项和工具项
  • 代码中遍历snapshot.getChildren()是为了兼容Firebase中动态生成的节点键(如dhjjkghehjkhj)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:08:25