Как удалить один элемент из моей базы данных, когда я нажимаю кнопку «Удалить»? - PullRequest
1 голос
/ 10 апреля 2019

Я новичок в Android Studio, и для моего Android-приложения я использую Firebase. Я хочу удалить один элемент из моей базы данных, когда нажимаю кнопку delete(btnDelete).

    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    Query query= FirebaseDatabase.getInstance()
            .getReference().child("users").child(uid).child("foto");



        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            foto_root=itemView.findViewById(R.id.foto_root);
            tvNameF=itemView.findViewById(R.id.tvNameF);
            tvPhoneF=itemView.findViewById(R.id.tvPhoneF);
            tvAdressF=itemView.findViewById(R.id.tvAdressF);
            tvMailF=itemView.findViewById(R.id.tvMailF);
            tvNoteF=itemView.findViewById(R.id.tvNoteF);
            btnDelete=itemView.findViewById(R.id.btnDelete);
        }

        public void setTvNameF(String tvNameFs){
            tvNameF.setText(tvNameFs);
        }
        public void setTvPhoneF(String tvPhoneFs){
            tvPhoneF.setText(tvPhoneFs);
        }

    }

    /*
    get on dataBase
     */
    private void fetch() {
        FirebaseRecyclerOptions<Foto> options=
                new FirebaseRecyclerOptions.Builder<Foto>().setQuery(query, snapshot -> new Foto(
                snapshot.child("id").getKey(),
                snapshot.child("name").getValue().toString(),
                snapshot.child("phone").getValue().toString(),
                snapshot.child("adress").getValue().toString(),
                snapshot.child("email").getValue().toString(),
                snapshot.child("note").getValue().toString())).build();
        adapter = new FirebaseRecyclerAdapter<Foto, FotoActivity.ViewHolder>(options) {

            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.foto_item,parent,false);
                return new ViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull ViewHolder viewHolder, int i, @NonNull Foto foto) {
                viewHolder.setTvNameF(foto.getNameF());
                viewHolder.setTvPhoneF(foto.getPhoneF());
                viewHolder.setTvAdressF(foto.getAdressF());
                viewHolder.setTvMailF(foto.getEmailF());
                viewHolder.setTvNoteF(foto.getNoteF());
                viewHolder.btnDelete.setOnClickListener(v -> {
                    delete();
                });
            }

        };
        rvFoto.setAdapter(adapter);
        }

    private void delete() {


        Toast.makeText(FotoActivity.this, "remove", Toast.LENGTH_SHORT).show();
    }

    private void viewRecyclerViewFoto() {
        linearLayoutManager=new LinearLayoutManager(this);
        rvFoto.setLayoutManager(linearLayoutManager);
        rvFoto.setHasFixedSize(true);
    }
}    


// adapter class

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

private void setInfoFoto() {
        DatabaseReference databaseReference=
                FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("foto").push();
        Map<String,Object> mapFoto=new HashMap<>();
        mapFoto.put("id",databaseReference.getKey());
        mapFoto.put("name",etNameF.getText().toString());
        mapFoto.put("phone",etPhoneF.getText().toString());
        mapFoto.put("adress",etAdressF.getText().toString());
        mapFoto.put("email",etMailF.getText().toString());
        mapFoto.put("note",etNoteF.getText().toString());

        databaseReference.setValue(mapFoto);

    }

Я хочу удалить один элемент из foto и не всю базу данных.

1 Ответ

1 голос
/ 10 апреля 2019

Просто используйте следующее в вашей функции удаления, это удалит значение узла "телефон". Вам нужно будет знать uid пользователя, которого вы хотите удалить, иначе вы можете заменить его ссылкой на узел базы данных, но тогда это удалит телефон из всех идентификаторов пользователей. По сути, вы будете слушать узел foto, получать все push-идентификаторы и перебирать push-идентификаторы, чтобы удалить нужный узел.

Объявить переменные

private static final String TAG = "TestActivity";
private DatabaseReference fbDbRef;

OnCreate

final String uid = "youruid";
fbDbRef = FirebaseDatabase.getInstance().getReference().child("users")
         .child(uid).child("foto");

Ваша функция

private void delete() {

fbDbRef.addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                final String pushKey = snapshot.getKey();
                Log.d(TAG, "pushKey: " + pushKey);
                fbDbRef.child(pushKey).child("phone").removeValue();

            }

        }

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

        }
    });

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