Firebase ValueEventListener Изменение данных без повторения [PLS help] - PullRequest
0 голосов
/ 19 сентября 2019

Здравствуйте. Я хочу получить ID пользователя, затем отредактировать его и вернуть обратно.Но всегда, когда я кладу его обратно, он повторяет весь процесс, который находится внутри ValueEventListener.

builder.setItems(options, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (which == 0) {
                        Intent intent = new Intent(mContext, NatursteineDetailsActivity.class);
                        mContext.startActivity(intent);
                    }

                    if (which == 1) {

                        id.remove(position);
                        notifyItemRemoved(position);
                        notifyItemRangeChanged(position, id.size());

                        String userFirebaseID = Prevalent.CurrentOnlineUser.getNachname() + ", " + Prevalent.CurrentOnlineUser.getName() + ", " + Prevalent.CurrentOnlineUser.getTelefon();
                        final DatabaseReference rootRef;
                        rootRef = FirebaseDatabase.getInstance().getReference().child("Benutzer").child(userFirebaseID);


                        rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {

                                String id;
                                String[] ids;
                                int length;

                                bestellungen = dataSnapshot.child("natursteineBestellungen").getValue().toString();
                                ids = bestellungen.split("/");
                                length = ids.length;
                                id = holder.txtID.getText().toString();

                                for (int i = 0; length > i; i++) {
                                    arrayList.add(ids[i]);
                                }

                                for (int i = 0; length > i; i++) {
                                    if (arrayList.get(i).equals(id)) {
                                        arrayList.remove(arrayList.get(i));
                                        break;
                                    }

                                }

                                updateFirebaseBestellung(arrayList, rootRef);

                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }
                        });

                        //Toast.makeText(mContext, bestellungen, Toast.LENGTH_SHORT).show();

                    }

                }
            });

            builder.show();

        }
    });
}

private void updateFirebaseBestellung(ArrayList<String> arrayList, final DatabaseReference rootRef) {
    bestellungen = String.join("/", arrayList);
    rootRef.child("natursteineBestellungen").setValue(bestellungen);
}

В основном я хочу показать заказы пользователя в представлении переработчика, и это работает, но если пользователь удаляетпорядок, в представлении рециркулятора каждый заказ добавляется к старым, потому что данные изменяются в методе "updateFirebaseBestellung" и все повторяется ... Но я не знаю, как я это изменить, потому что, если я пытаюсь получить полученные данныепосле ValueEventListener он не получил никаких данных.Есть ли возможность остановить ValueEventListener в методе onDataChange?Я надеюсь, что вы могли понять мой английский

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