Избегайте дублирования значений в Firebase FireStore с помощью Android - PullRequest
1 голос
/ 01 октября 2019

Я храню некоторые данные в 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 уже существует.

Это изображение из базы данных:

enter image description here

Isесть какой-нибудь совет о том, как заставить его работать, чтобы я мог просто добавить книгу, если она не существует, или получить сообщение, если она уже существует?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...