Проблема с реализацией ValueEventListeners - PullRequest
0 голосов
/ 08 мая 2020

В приведенном ниже коде я делаю то, что я проверяю, существует ли EventsRef dataSnapshot или нет, если dataSnapshot существует = я получаю некоторые значения и сохраняю их в списке и передаю значения этого списка методу recyclerView, в этом он отображает эти значения, и моя проблема в том, что 2 пользователя в сети, и оба они отображают эти данные, если user1 удаляет эту ссылку из базы данных firebase, удаляя это событие, user2 получает ошибку и выходит из приложения. Я использовал прослушиватель дочерних событий, как в приведенном ниже коде, но он тоже не работает. и если я использую условия if else внутри дочернего прослушивателя событий внутри дочернего элемента Added, он также не работает, поэтому, пожалуйста, помогите мне решить обе эти проблемы. Заранее спасибо.

EventsRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {
            if (dataSnapshot.exists())
            {
                EventsRef.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
                    {
                        EventsRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
                            {
                                if (dataSnapshot.exists())
                                {
                                    for (DataSnapshot ds : dataSnapshot.getChildren())
                                    {
                                        String eventId = ds.child("Eid").getValue(String.class);
                                        String gender = ds.child("Gender").getValue(String.class);
                                        String serveCount = ds.child("Serve").getValue(String.class);

                                        list.add(eventId);
                                        list2.add(gender);
                                        list3.add(serveCount);

                                    }

                                    if (list.size() != 0)
                                    {
                                        for (int i = 0; i < list.size(); i++)
                                        {
                                            RecyclerView(list.get(i), list2.get(i), list3.get(i));
                                        }
                                    }


                                }
                            }

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

                            }
                        });
                    }

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

                    }

                    @Override
                    public void onChildRemoved(@NonNull DataSnapshot dataSnapshot)
                    {
                        Toast.makeText(WorkerMyEventActivity.this, "Event removed", Toast.LENGTH_SHORT).show();
                    }

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

                    }

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

                    }
                });
            }
            else
            {
                progressDialog.dismiss();
                TextView txt = (TextView) findViewById(R.id.txt);
                txt.setVisibility(View.VISIBLE);
            }
        }

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

        }
    });

enter image description here

...