在Android Studio中实现从Firebase获取数据展示到ListView的问题求解
修改方案
你只需要调整两处代码即可实现需求:
- 初始化ArrayAdapter时绑定你声明的ArrayList,这样后续往列表里加数据才会同步到控件上
- 在
ChildEventListener的onChildAdded回调中读取目标字段,添加到列表后通知适配器刷新
修改后的完整代码如下:
public class TimeTableActivity extends AppCompatActivity { ListView table01; DatabaseReference Trainline; ArrayList<String> arrayList= new ArrayList<>(); ArrayAdapter<String> arrayAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_time_table); Trainline= FirebaseDatabase.getInstance().getReference("Time_table"); table01 = findViewById(R.id.table01); // 这里修改:把arrayList作为第三个参数传入适配器 arrayAdapter = new ArrayAdapter<>(TimeTableActivity.this, android.R.layout.simple_list_item_1, arrayList); table01.setAdapter(arrayAdapter); Trainline.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) { // 这里修改:取出你需要的字段值,替换引号里的字段名为你红下划线标注的字段名即可 String targetValue = snapshot.child("你要提取的字段名").getValue(String.class); if(targetValue != null){ arrayList.add(targetValue); arrayAdapter.notifyDataSetChanged(); } } @Override public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) { // 如果需要响应数据修改的话可以在这里加对应逻辑,不需要的话可以留空 } @Override public void onChildRemoved(@NonNull DataSnapshot snapshot) { } @Override public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) { } @Override public void onCancelled(@NonNull DatabaseError error) { // 可以加个错误提示方便排查问题 Toast.makeText(TimeTableActivity.this, "读取数据失败:" + error.getMessage(), Toast.LENGTH_SHORT).show(); } }); } }
注意事项
- 把代码里的
你要提取的字段名替换成你数据库里实际标红的字段名称即可,如果你需要展示多个字段,拼接成字符串再加入列表就行 - 要确保你的Firebase数据库读写权限已经开启,否则会触发
onCancelled回调读取不到数据
内容的提问来源于stack exchange,提问作者Lakruwan
相关产品推荐
相关产品推荐

