java - 如何从 Button 的 onClick 监听器中删除 Firebase 数据库

标签 java android firebase firebase-realtime-database onclick

我正在使用回收适配器类在我的应用中显示 Firebase 数据,其中包含可供购买的图书列表。

但是一旦一本书售出,我希望用户能够删除那本书,并最终在点击按钮时从 Firebase 数据库中删除。 我该怎么做?

这是我的 Firebase 数据结构:

enter image description here 这是 RecycleAdapter 类

这是我的适配器数据类:

public class SubjectBooksAdapter extends RecyclerView.Adapter<SubjectBooksAdapter.MyViewHolder> {
    ArrayList<Books> bookslist;
    CardView cv;
    FirebaseAuth fauth;
    FirebaseDatabase database;
    DatabaseReference dbreference;
    Books b;

    public SubjectBooksAdapter(ArrayList<Books> bookslist){
        this.bookslist = bookslist;
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView bookName,bookAuthor,bookDesc,bookPrice,bookCall;
        ImageView iv;
        Button delete;

        MyViewHolder(final View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.my_card_view);

            iv = (ImageView) itemView.findViewById(R.id.imageView);

            database = FirebaseDatabase.getInstance();
            dbreference = database.getReference("books");
            bookName = (TextView) itemView.findViewById(R.id.bookName);
            bookAuthor = (TextView) itemView.findViewById(R.id.bookAuthor);
            bookDesc = (TextView) itemView.findViewById(R.id.bookDesc);
            bookPrice = (TextView) itemView.findViewById(R.id.bookPrice);
            bookCall = (TextView) itemView.findViewById(R.id.bookCall);
            fauth = FirebaseAuth.getInstance();

            delete = (Button) itemView.findViewById(R.id.delete);
        }
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        database = FirebaseDatabase.getInstance();
        dbreference = database.getReference("books");

        b = bookslist.get(position);
        holder.bookName.setText(b.getBname());
        holder.bookAuthor.setText(b.getBauthor());
        holder.bookDesc.setText(b.getBdesc());
        holder.bookPrice.setText("Rs. "+b.getPrice());
        holder.bookCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Log.e("Current user is ", fauth.getCurrentUser().getEmail());
                b = bookslist.get(position);
                String[] arr = {b.getSelleremail(),b.getSellername(),b.getBname(),b.getBauthor()};
                //Log.e("Seller is ",b.getSellername());
                Intent in = new Intent(v.getContext(),Chat.class);
                in.putExtra("seller",arr);
                v.getContext().startActivity(in);
            }
        });
        Glide.with(cv.getContext()).load(Uri.parse(b.getPics())).placeholder(R.drawable.bshelf).error(R.drawable.bshelf).into(holder.iv);
    }

    @Override
    public int getItemCount() {
        return bookslist.size();
    }
}

我在上传类中使用它在 Firebase 中推送数据:

 String bookid = dbreference.child("books").child(item).push().getKey();
                dbreference.child("books").child(item).child(bookid).setValue(b);

最佳答案

您可以将 null 放在您的 bookid 上以将其从数据库中删除。

dbreference.child("books").child(bookId).setValue(null);

关于java - 如何从 Button 的 onClick 监听器中删除 Firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113865/

相关文章:

android - 自定义状态可绘制对象在图书馆项目中不起作用

javascript - 占位符能否仅用于 Firebase 中的数据库事件而不用于查询?

java - 如何更改添加到 View AndEngine 的 Sprite 的方向?

java - 我的数字时钟不工作

android - ADT : Java heap space 问题

android - 当 BottomAppBar 从隐藏状态返回时,BottomAppBar FabCradleMargin 变得越来越小,几乎是平的

java - 让 GWT 验证发挥作用

java - 修复 Java 中动画 gif 的帧速率

node.js - 如何在 Cloud Functions for Firebase 中发出 HTTP 请求?

firebase - 在 Facebook 上使用 Firebase 身份验证