Как я могу получить данные из базы данных Firebase в реальном времени в массив? Я хочу изменить статические данные в массиве, чтобы данные Firebase - PullRequest
0 голосов
/ 23 января 2019

Я создал собственный календарь, который использует массив «HomeCollection», взятый из ссылки github https://github.com/DeveloperBrothers/Custom-Calendar-View, чтобы создать собственный календарь в моем приложении для Android. В настоящее время данные о событиях жестко запрограммированы в этом массиве (см. Фрагмент кода ниже), но вместо этого я хочу взять атрибуты событий из моей базы данных Firebase, где я создал базу данных и сохранил такие данные о событиях (см. Ссылку на изображение ниже).

HomeCollection.date_collection_arr = new ArrayList<HomeCollection>();
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-21", "Winter Table Quiz", "7-10 pm, Clubhouse", "ClubHouse", "Come along to the Winter Table Quiz, €5pp, tables of 4, theres lots of great prizes to be won."));
       HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-03", "u21 Division 1 Training ", "10-11am, Club Grounds", "ClubHouse", "Weekly Division 1 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-03", "u21 Division 2 Training ", "11-12am, Club Grounds", "ClubHouse", "Weekly Division 2 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-10", "u21 Division 1 Training ", "10-11am, Club Grounds", "ClubHouse", "Weekly Division 1 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-10", "u21 Division 2 Training ", "11-12am, Club Grounds", "ClubHouse", "Weekly Division 2 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-17", "u21 Division 1 Training ", "10-11am, Club Grounds", "ClubHouse", "Weekly Division 1 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-17", "u21 Division 2 Training ", "11-12am, Club Grounds", "ClubHouse", "Weekly Division 2 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-24", "u21 Division 1 Training ", "10-11am, Club Grounds", "ClubHouse", "Weekly Division 1 training. Weather dependant."));
        HomeCollection.date_collection_arr.add(new HomeCollection("2018-11-24", "u21 Division 2 Training ", "11-12am, Club Grounds", "ClubHouse", "Weekly Division 2 training. Weather dependant."));*/
        cal_month = (GregorianCalendar) GregorianCalendar.getInstance();
        cal_month_copy = (GregorianCalendar) cal_month.clone();
        hwAdapter = new HwAdapter(this, cal_month, HomeCollection.date_collection_arr);

Может ли кто-нибудь помочь мне изменить этот статический код на данные моей базы данных Firebase?

Ссылка на мое дерево событий JSON Firebase image

Ответы [ 2 ]

0 голосов
/ 23 января 2019

1) вы должны получить ссылку на базу данных firebase в вашем коде

DatabaseReference mFireBaseDatabaseReference = FirebaseDatabase.getInstance().getReference();

2) затем вы должны добавить прослушиватель firebase для получения данных:

mFireBaseDatabaseReference.child("events").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                //you can parse the data in your models here like this
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
Event event = childSnapshot.getValue(Event.class);
HomeCollection.date_collection_arr.add(event);
}
            }

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

            }
        });
0 голосов
/ 23 января 2019

Таким образом, вы можете создать Java-бин для сохранения всех этих данных. Создайте методы getter и setter для всех данных, которые вы храните как объект. Например, создайте методы getter и setter для свойств объектов, таких как: eventDate, eventDescription и т. Д., И скажите, что вы называете свой компонент как EventBean.java.

Теперь используйте childEventListener примерно так:

mDatabaseReference = mFirebaseDatabase.getReference().getChild("event");
mDatabaseReference.addChildEventListener(new OnChildEventListener(){

@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildName){
EventBean data = snapshot.getValue(EventBean.class);//now you have got data in the 
eventbean instance
System.out.println(data.getEventDate());
}
});

Надеюсь, это то, что вы ищете.

...