I am trying to insert data in RoomDb but at the the time of data insertion app is crashing even if I am writing insertion operation in thread.I have a recycler view adapter class in which I have a click listener based on that I want to add data in RoomDb.
Here is my logcat error:
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
Below is my code:
ProductAdapter.class
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ViewHolder> {
List<Product> productList;
Context context;
public ProductAdapter(List<Product> productList, Context context) {
    this.productList = productList;
    this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_row,parent,false);
    return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Product product = productList.get(position);
    holder.productName.setText(product.getName());
    holder.productPrice.setText(product.getPrice());
    Glide.with(context).load(product.getProduct_image()).placeholder(R.color.teal_200).into(holder.productImage);
    holder.productCard.setAnimation(AnimationUtils.loadAnimation(context,R.anim.recycler_anim));
    holder.addToCart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.tick.setVisibility(View.VISIBLE);
            holder.addToCart.setVisibility(View.INVISIBLE);
            ((AppCompatActivity)context).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ProductDb db = ProductDb.getInstance(context);
                    CartProduct  cartProduct = new CartProduct(product.get_id(),product.getName(),product.getProduct_image(),
                                               product.getPrice(),"1");
                    db.productDao().insert(cartProduct);
                }
            });
         }
    });
}
@Override
public int getItemCount() {
    return productList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView productImage,addToCart,tick;
    TextView productName,productPrice;
    CardView productCard;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        productImage = itemView.findViewById(R.id.productImage);
        productName = itemView.findViewById(R.id.productName);
        productPrice = itemView.findViewById(R.id.productPrice);
        productCard = itemView.findViewById(R.id.productCard);
        tick = itemView.findViewById(R.id.tick);
        addToCart = itemView.findViewById(R.id.addToCart);
    }
  }
}
How can I overcome this issue?
 
     
    