有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从firebase实时数据库获取下一个子项的数据并在列表视图中显示

我正在开发一个音频圣训,现在我想将第一个键显示为一个类别,如RamadanZakat等,在每个类别中,都会有很多音频圣训的标题和音频URL

这是数据库结构映像:

image

public  void readHadiths(final DataStatus dataStatus){

        mDbReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

               hadiths.clear();

               List<String> keys = new ArrayList<>();

               for (DataSnapshot keyNode : dataSnapshot.getChildren()){

                        keys.add(keyNode.getKey());
                        String title = keyNode.child("title").getValue(String.class);
                        Hadith Hadits = keyNode.getValue(Hadith.class);
                        hadiths.add(Hadits);
                   Log.d("TAG", title);
               }
                dataStatus.DataLoaded(hadiths,keys);
            }

共 (1) 个答案

  1. # 1 楼答案

    无法查询实际数据库结构以一次性获取所有Hadith对象,因为这些对象中的每一个都存在于单独的节点中。为了解决这个问题,我建议您通过减少节点数量来更改数据库结构,如下所示:

    Firebase-root
        |
         - Hadiths
              |
               - hadith1
              |     |
              |      - title: "This is hadith1 title"
              |     |
              |      - url: "eg.example.com"
              |     |
              |      - type: "Ramadan"
              |
               - hadith2
                    |
                     - title: "This is hadith2 title"
                    |
                     - url: "eg.example.com"
                    |
                     - type: "Zakat"
    

    现在,要查询斋月的所有圣训,请使用以下查询:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query query = rootRef.child("Hadiths").orderByChild("type").equalTo("Ramadan");
    query.addListenerForSingleValueEvent(/* ... */);