簡體   English   中英

多個查詢 orderBy 子句 Firebase - Java

[英]Multiple query orderBy clauses Firebase - Java

我正在嘗試查詢我的Messages表中的三件事。 第一個是涉及當前用戶登錄的任何消息。然后,我想獲取當前用戶與之有聯系的人的用戶 ID。 最后,我想檢查是否看到了任何消息。 但現在我的查詢只運行第一個和最后一個查詢,而不是第二個。 但我不知道為什么。

消息表

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference userMessageKeyRef = dbRef.child("Messages").child(firebaseUser.getUid());
userMessageKeyRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for (DataSnapshot snapshot1 : snapshot.getChildren()) {

            String messageToID = snapshot1.getKey();

            DatabaseReference messageRef = dbRef.child("Messages").child(firebaseUser.getUid()).child(messageToID);
            Query query = messageRef.orderByChild("to").equalTo(firebaseUser.getUid());
            query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    long count = dataSnapshot.getChildrenCount();

                    if (dataSnapshot.exists()) {

                        DatabaseReference messageKeyRef = dbRef.child("Messages").child(firebaseUser.getUid()).child(messageToID);
                        Query query2 =  messageKeyRef.orderByChild("isSeen").equalTo(false);

                        query2.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataShot) {

                                if (dataShot.exists() && count > 0) {

                                    //Log.d("TAG2", "count if: " + count2);
                                    messages_text.setText("" + Math.toIntExact(count));
                                    messages_text.setVisibility(View.VISIBLE);
                                } else {

                                    messages_text.setVisibility(View.GONE);
                                }
                            }

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

                            }
                        });

                    } else {

                        messages_text.setVisibility(View.GONE);
                    }

                }

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

                }
            });

            //Log.d("TAG1", "User to: " + messageToID);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
    }
});

您的第一個addValueEventListener已經為當前用戶加載了所有數據,因此無需將 go 返回數據庫以再次加載該數據。 相反,您應該檢查應用程序代碼中每條消息的屬性,例如:

DatabaseReference userMessageKeyRef = dbRef.child("Messages").child(firebaseUser.getUid());
userMessageKeyRef.addValueEventListener(new ValueEventListener() {
    for (DataSnapshot messageSnapshot : snapshot.getChildren()) {
        String messageToID = messageSnapshot.getKey();
        String toValue = messageSnapshot.child("to").getValue(String.class);
        Boolean isSeenValue = messageSnapshot.child("isSeen").getValue(Boolean.class);

        if (toValue.equals(firebaseUser.getUid()) && isSeenValue == true) {
            ...
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM