Reputation: 439
I'm using Recycle Adapter Class to show the Firebase Data in my app which contains the list of books that are available to purchase.
But once a book is sold, I want the user will be able to delete that book and will eventually delete from Firebase Database also on onClick of Button. How can I do this?
Here is my Firebase Data Structure:
Here is my Adapter Data Class:
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();
}
}
And I'm using this in upload class to push Data in Firebase:
String bookid = dbreference.child("books").child(item).push().getKey();
dbreference.child("books").child(item).child(bookid).setValue(b);
Upvotes: 3
Views: 3109
Reputation: 1061
use this code:
DatabaseReference driverRef = FirebaseDatabase.getInstance().getReference().child("bname");
driverRef.removeValue();
if you delete whole database
use this
DatabaseReference driverRef = FirebaseDatabase.getInstance().getReference();
driverRef.removeValue();
//---------------------Use on Button click Listener--------
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference driverRef = FirebaseDatabase.getInstance().getReference().child("bname");
driverRef.removeValue();
}
});
Upvotes: 1
Reputation: 3001
dbref.child("books").child("Computer Science").child(key).removeValue();
Upvotes: 1
Reputation: 113
This code will remove a book you want, just get the id of the book and place inside onClickListener:
dbreference.child("books").child(item).child(bookid).removeValue();
Upvotes: 1
Reputation: 789
If you know the id of that book you should be able to remove the child with that id reference.
You have to implement the click listener as you did before with holder.bookCall.setOnClickListener(...);
Code:
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbreference.child("books").child(bookId).remove();
}
});
I hope it helps you.
Upvotes: 2
Reputation: 471
You can put null
against your bookid to remove it from it from database.
dbreference.child("books").child(bookId).setValue(null);
Upvotes: 2