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

Я хочу заполнить мое расширяемое представление списка значениями из базы данных Firebase.Я могу добавлять данные в представления статически, но через Firebase нет.

Это мой код для этого:

public class ExpandableListitems {
public List<String> food;

public HashMap<String, List<String>> getData() {
    final HashMap<String, List<String>> expandableListDetail = new HashMap<String, List<String>>();



    //getting fooditems from database
    FirebaseDatabase firebaseDatabasefighter = FirebaseDatabase.getInstance();
    DatabaseReference databaseReferencefighter = firebaseDatabasefighter.getReference("food").child("food_details");
    ValueEventListener valueEventListenerfighter = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {

                food = new ArrayList<String>();
                String value = String.valueOf(ds.getValue());


                food.add(value);

                Log.i("vipan",value);
            }

        }

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

        }
    };
    databaseReferencefighter.addValueEventListener(valueEventListenerfighter);


    food.add("milk");
    food.add("dahi");
    food.add("paratha");
    food.add("aaloo");


   expandableListDetail.put("FoodItems", food);
    return expandableListDetail;

И моя база данных выглядит так:

  food

food_details: "2% Fat Milk"

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

1 Ответ

0 голосов
/ 06 декабря 2018

Вы не можете вернуть то, что еще не было загружено.Другими словами, вы не можете просто вернуть expandableListDetail HashMap<String, List<String>>, который содержит список строк, поступающих из базы данных в результате метода, потому что этот список всегда будет empty из-за асинхронного поведения этого метода.Это означает, что к тому времени, когда вы пытаетесь вернуть этот результат, данные еще не закончили загрузку из базы данных, и поэтому они недоступны.

Быстрое решение этой проблемы - использование food список только внутри метода onDataChange(), в противном случае я рекомендую вам увидеть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделать с помощью пользовательскогоПерезвоните.Вы также можете взглянуть на это видео для лучшего понимания.

...