如何通过Firebase数据库填充ExpandableListView子视图?

时间:2018-12-06 08:32:31

标签: java android firebase firebase-realtime-database expandablelistview

我想用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%脂肪牛奶”

我想将此 food_details 值添加到 listview的视图中,但到目前为止还无法实现。我该如何实现?

1 个答案:

答案 0 :(得分:0)

您现在无法返回尚未加载的内容。换句话说,您不能简单地返回expandableListDetail HashMap<String, List<String>>,其中包含作为方法的结果来自数据库的字符串的列表,因为由于该方法的异步行为,该列表将始终为empty 。这意味着,当您尝试返回该结果时,数据尚未从数据库中完成加载,因此无法访问。

此问题的快速解决方案是仅在food方法内使用onDataChange()列表,否则我建议您从此 {{3} } ,其中我解释了如何使用自定义回调来完成。您也可以查看此 post 以获得更好的理解。