首页 > 解决方案 > 避免使用 android 在 Firebase Firestore 中出现重复值

问题描述

我在 Cloud Firesore 中存储了一些数据。我有一些书籍屏幕,当我单击“喜欢按钮”时,它会将书籍保存到一个名为WhishlistBooks

现在,在我将这本书保存到收藏中之前,我如何检查这本书是否已经存在?

我尝试使用以下内容,但由于某种原因,即使它不存在,它也不会添加该书:

ibWhishlist.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ibWhishlist.setSelected(!ibWhishlist.isSelected());
        if (ibWhishlist.isSelected()) {
            final FirebaseFirestore db = FirebaseFirestore.getInstance();

            final Map<String, Object> whishlist_book = new HashMap<>();
            whishlist_book.put("UserID",auth.getUid());
            whishlist_book.put( "BookID", bookId );
            whishlist_book.put("DateCreated", FieldValue.serverTimestamp());
            whishlist_book.put("Popularity",bookRate);

            CollectionReference WhishlistBooks = db.collection( "Users" ).document(auth.getUid()).collection( "WhishlistBooks" );
            WhishlistBooks.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            if (document.getString( "BookID" ).equals( bookId )){
                                LayoutInflater inflater = LayoutInflater.from( BookDetailActivity.this );
                                View toastview = inflater.inflate( R.layout.toast_whishlist_exists, null );
                                Toast toast = new Toast( BookDetailActivity.this );
                                toast.setView( toastview );
                                toast.setDuration( Toast.LENGTH_LONG );
                                toast.show();
                            }
                            else{
                                db.collection( "Users" ).document( auth.getUid() ).collection( "WhishlistBooks" ).add( whishlist_book );

                                LayoutInflater inflater = LayoutInflater.from( BookDetailActivity.this );
                                View toastview = inflater.inflate( R.layout.toast_whishlist_added, null );
                                Toast toast = new Toast( BookDetailActivity.this );
                                toast.setView( toastview );
                                toast.setDuration( Toast.LENGTH_LONG );
                                toast.show();
                            }
                        }
                    } else {

                    }
                }
            });
        } else {
            //Handle de-select state change
        }
    }
});

但是,我在这里遇到了两个问题:

1)第一次用户还没有插入一本书的时候,没有名为Whishlist的集合,所以任务没有成功完成。

2)由于某种原因,它无法真正找到是否bookId已经存在。

这是来自数据库的图像:

在此处输入图像描述

有没有关于如何使它工作的提示,所以如果它不存在,我可以添加这本书,或者如果它已经存在,我可以得到一条消息?

谢谢你。

标签: androidfirebasegoogle-cloud-firestore

解决方案


推荐阅读