【问题标题】:Fetch children data from Firebase Database in ListView从 ListView 中的 Firebase 数据库中获取子数据
【发布时间】:2020-09-04 00:54:35
【问题描述】:

我有一个ListView。在列表视图中,我想从 Firebase 数据库中获取数据。我能够显示标题,在活动中计数。我想获取有多少status显示未读,这将是semester Wise

unread_count 不起作用。

下面是数据库结构:

我在下面尝试过,但无法获取 unread_count。它总是显示 0

    databaseReference = FirebaseDatabase.getInstance().getReference("All_Image_Uploads_Database");
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list = new ArrayList<ListType>();
            list.clear();
            for (DataSnapshot postSnapshot:dataSnapshot.getChildren()){
                String count = String.valueOf(postSnapshot.getChildrenCount());
                String title = postSnapshot.getKey();
                String unread_count = String.valueOf(postSnapshot.child("status").getChildrenCount());
                ListType listType = new ListType(title, count, unread_count);
                list.add(listType);

            }

            ListTypeList listTypeList = new ListTypeList(HomeActivity.this, list);
            listView.setAdapter(listTypeList);
        }

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

        }
    });

我需要获取多少“状态”显示“未读”。这意味着在学期明智地计算“未读”的数量。

我需要您对如何获取所需数据的建议。

【问题讨论】:

  • 您要获取一个学期或所有学期的数字?
  • 我想获得学期明智的未读数字
  • 对不起,我不明白。您需要从一个学期(例如“第一学期”)或全部(“第一学期”、“第二学期”、“第三学期”等)中获取数字?
  • “第一学期”:未读> 1, , “第二学期”:未读> 3, “第三学期”:未读> 2 同样,我需要结果。我想得到所有学期的结果
  • @Alex Mamo 学期充满活力。我将如何获取结果,请建议先生

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


【解决方案1】:

根据这条评论:

"Semester I" : unread> 1, , "Semester II": unread> 3, "Semester III":unread> 2 同样我需要结果。我想得到所有学期的结果

还有这个:

学期是动态的。我将如何获取结果,请建议先生

我可以告诉您,您不能在单个查询中计算它。您必须单独使用每个学期的查询并一个一个地计算它们,或者您可以复制数据。我能想到的最佳解决方案可能是更改您的数据库架构。您的新架构可能如下所示:

Firebase-root
   |
   --- allSemesters
         |
         --- -M7_k ... 8Agw
         |      |
         |      --- semester: 1
         |      |
         |      --- //Other data
         |
         --- -M7a1 ... zZoO
                |
                --- semester: 2
                |
                --- //Other data

使用这样的架构,您可以解决两个问题。一个是获取所有对象的计数,第二个是获取特定学期的计数。正如您在问题中所要求的,要计算所有这些对象,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference allSemestersRef = rootRef.child("allSemesters");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.d("TAG", "Count: " + dataSnapshot.getChildrenCount());
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
allSemestersRef.addListenerForSingleValueEvent(valueEventListener);

你也可以看看我在以下帖子中的回答:

如果您只想获取特定学期的对象,则应使用以下查询:

allSemestersRef.orderByChild("semerster").equalTo(2);

【讨论】:

  • 谢谢先生。我会按照您的建议执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多