首页 > 解决方案 > 列表视图从android中firebase中的实时数据库中检索一项

问题描述

我正在尝试在列表视图中检索 fire-base 中的所有数据,但它只添加了列表视图中的第一项。一旦我添加了一个新学生,它只会将最后一个新学生检索到列表视图中。我在互联网上进行了很多搜索,但没有得到所需的解决方案。请问你能帮我吗?

我的 Firebase 数据

这是我的课程,它将所需的数据添加到列表视图中。

public class emptySeatNum extends Activity {

ListView listView;
FirebaseDatabase database;
DatabaseReference reference;

ArrayList<String> array = new ArrayList<>();
ArrayAdapter<String> adapter;

Students students;
String studentName;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.seat_num);

    listView = findViewById(R.id.newListView);
    students = new Students();
    database = FirebaseDatabase.getInstance();
    reference = database.getReference("Students");
    studentName = students.getStuden_name();

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot ds: dataSnapshot.getChildren()){
                students = ds.getValue(Students.class);

                array.add(students.getStuden_name());
                adapter = new ArrayAdapter<String>(emptySeatNum.this,android.R.layout.simple_list_item_1,array);

                listView.setAdapter(adapter);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

标签: androidfirebasefirebase-realtime-database

解决方案


这种行为是因为您每次都在for循环中添加以下 2 行,这就是每次都制作适配器并设置它。

adapter=newArrayAdapter<String(emptySeatNum.this,android.R.layout.simple_list_item_1,array);
listView.setAdapter(adapter);

将它们放在for循环之外,然后运行它。

 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot ds: dataSnapshot.getChildren()){
                students = ds.getValue(Students.class);    
                array.add(students.getStuden_name());
            }//for loop ending brace
                adapter = new ArrayAdapter<String>(emptySeatNum.this,android.R.layout.simple_list_item_1,array);
                listView.setAdapter(adapter);
        }

推荐阅读