Я пытаюсь указать, есть ли в чате новые сообщения, которые не прочитаны или нет, в моем MatchesObject каждый объект имеет логическое значение - PullRequest
0 голосов
/ 19 сентября 2019

Мой matchesObject имеет логическое значение, независимо от того, является ли отображаемый чат непрочитанным или нет, я хочу обновлять представление recycler каждый раз, когда приходит новое сообщение, и оно не читается, вместо того, чтобы делать это только один раз, когда приложение запускается в первый раз.

Я также вызываю getUserMatchId() в моем методе oncreate().

Я думаю о вызове getUserMatchId() в моем методе getUnread(), но это приведет к тому, что приложение войдет в бесконечный цикл.

Изображение моей базы данных прилагается к вопросу.поэтому, в основном, при каждом новом сообщении, отправляемом пользователем другому пользователю, к которому у него есть соединение, он добавляет идентификатор противоположного пользователя в непрочитанный узел узла chatId.

    private void getUserMatchId() {

    DatabaseReference matchDb = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserId).child("connections").child("matches");
    matchDb.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot match : dataSnapshot.getChildren()) {
                    FetchMatchInformation(match.getKey());
                }

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

private void FetchMatchInformation(final String key) {

    DatabaseReference userDb = FirebaseDatabase.getInstance().getReference().child("Users").child(key);

    userDb.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists() && dataSnapshot.getKey()!= currentUserId) {

                String userId = dataSnapshot.getKey();
                String name = "";
                String profileImageUrl = "";
                String notificationKey = "";

                getChatId(dataSnapshot, key);
                getUnread();

                if (dataSnapshot.child("name").getValue() != null) {
                    name = dataSnapshot.child("name").getValue().toString();
                }
                if (dataSnapshot.child("profileImageUrl").getValue() != null) {
                    profileImageUrl = dataSnapshot.child("profileImageUrl").getValue().toString();
                }if (dataSnapshot.child("notificationKey").getValue() != null) {
                    notificationKey = dataSnapshot.child("notificationKey").getValue().toString();
                }


                MatchesObject obj = new MatchesObject(userId, name, profileImageUrl, notificationKey, unRead);

                resultMatches.add(obj);
                mMatchesAdapter.notifyDataSetChanged();
                nestedScrollView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //replace this line to scroll up or down
                        nestedScrollView.fullScroll(ScrollView.FOCUS_UP);
                    }
                }, 100L);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {


        }
    });
}

private void getChatId(DataSnapshot userDb, String key) {

    mChatId = userDb.child("connections").child("matches").child(key).child("ChatId").getValue().toString();
    getUnread();

}


private void getUnread(){

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Chat").child(mChatId).child("Unread");
    ref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            if(dataSnapshot.exists() && dataSnapshot.getValue().toString() == FirebaseAuth.getInstance().getCurrentUser().toString()){
            unRead = true;
             }else{
            unRead = false;
            }

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...