如何在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
相关产品推荐
相关产品推荐

