如何检查房间数据库中是否已存在某项?

时间:2020-09-05 16:58:43

标签: android adapter android-room onclicklistener

我有一个带按钮的适配器,该按钮取决于对象在房间数据库中是否已存在,在单击该对象时其行为会有所不同。基本上,我想做的是如果对象存在,我想将其删除。如果不是,我想将其添加到我的数据库中。我在Dao中创建了此方法,并创建了一个Task以检查其存在。由于任务是异步的,我该如何进行验证?

我的适配器

public class RestaurantAdapter extends RecyclerView.Adapter<RestaurantAdapter.RestaurantViewHolder> {
    private Context mContext;
    private List<Restaurant_> mRestaurants;
    private Activity act;
    private FirebaseAuth mAuth;
    private String currentUserId;
    private View rView;

    public RestaurantAdapter(Context context, List<Restaurant_> restaurants, Activity activity) {
        mRestaurants = restaurants;
        mContext = context;
        act = activity;
    }

    @Override
    public RestaurantViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // Get layout inflater from context
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        // Inflate layout
        rView = inflater.inflate(R.layout.item_restaurant, parent, false);

        // Return a new holder instance
        return new RestaurantViewHolder(rView);
    }

    @Override
    public void onBindViewHolder(RestaurantViewHolder viewHolder, final int position) {

        // Get the data model based on position
        final Activity activity = act;

        final Restaurant_ restaurant = mRestaurants.get(position);

        mAuth = FirebaseAuth.getInstance();
        currentUserId = mAuth.getCurrentUser().getUid();

        final TextView name = viewHolder.nameTextView;
        name.setText(restaurant.getName());

        final TextView rating = viewHolder.ratingTextView;
        rating.setText((restaurant.getUserRating().getAggregateRating()));

        final TextView distance = viewHolder.distanceTextView;
        distance.setText(String.valueOf(restaurant.getDistance()) + " Km");

        final ImageButton addToWishlistButton = viewHolder.addToWishlistButton;
        addToWishlistButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Wishlist wishlist = new Wishlist(currentUserId, restaurant.getId());
                //if(alreadyExists){
                //RemoveWLTask rlt=new RemoveWLTask(wishlist,activity);
                //rlt.execute()
               // }

               // else{
                    AddWLTask wlt = new AddWLTask(wishlist, activity);
                    wlt.execute();
                //}
            }
        });

        final ImageButton addToFavoritesButton = viewHolder.addToFavoritesButton;
        addToFavoritesButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                addToFavoritesButton.getBackground().setTint(activity.getResources().getColor(R.color.red));
                addToFavorites();
            }
        });

        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LiveFragment.getListener().onRestaurantClicked(restaurant.getId());
            }
        });
    }

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


    public class RestaurantViewHolder extends RecyclerView.ViewHolder {
        public TextView nameTextView;
        public TextView ratingTextView;
        public TextView distanceTextView;
        public ImageButton addToWishlistButton;
        public ImageButton addToFavoritesButton;

        public RestaurantViewHolder(View itemView) {
            super(itemView);
            nameTextView = itemView.findViewById(R.id.restaurantName);
            ratingTextView = itemView.findViewById(R.id.restaurantRating);
            distanceTextView = itemView.findViewById(R.id.restaurantDistance);
            addToWishlistButton = itemView.findViewById(R.id.button_wishlist);
            addToFavoritesButton = itemView.findViewById(R.id.button_favorites);
        }

    }

}

我的DAO

@Dao
public interface DAO {
    @Insert
    public void addToWishlist(Wishlist wishlist);

    @Delete
    public void deleteFromWishlist(Wishlist wishlist);

    @Query("Select restaurantId From wishlist Where userId=:id")
    public String[] loadWishlist(String id);

    @Query("Select restaurantId From wishlist where userId=:userID AND restaurantId=:restaurantID")
    public String[]checkExists(String userID, String restaurantID);
    
}

##我的任务##

public class CheckWLTask extends AsyncTask<Void, Void, Void> {
    private DB db;
    private Activity activity;
    private String userId;
    private String restaurantId;
    private String [] response;

    public CheckWLTask(Activity activity, String idUser, String idRestaurant) {
        this.activity = activity;
        this.userId = idUser;
        this.restaurantId = idRestaurant;
        db = Room.databaseBuilder(activity.getApplicationContext(), DB.class, "sample-db").build();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        while (!isCancelled()) {
            this.response=db.daoAcess().checkExists(userId,restaurantId);
            break;
        }
        return null;
    }


}
``

0 个答案:

没有答案