просмотр списка получить один элемент из базы данных в режиме реального времени в Firebase в Android - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь получить все данные в базе данных на основе списка, но он добавляет только первый элемент в список. Как только я добавлю нового студента, он будет извлекать только последнего нового студента в список. Я много искал в интернете, но не нашел нужного решения. Пожалуйста, вы можете мне помочь в этом?

My Fire-base Data

Вот мой класс, который добавляет необходимые данные в список.

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) {

        }
    });
}

1 Ответ

0 голосов
/ 17 ноября 2018

Это происходит потому, что вы каждый раз добавляете ниже 2 строк в цикл for, который каждый раз делает адаптер и устанавливает его.

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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...