Firestore проверяет, существует ли документ в коллекции - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать код для загрузки товара / товара в магазин. что я хочу, это если товар уже зарегистрирован в пожарном депо, то пересчитать количество. Но если товар еще не зарегистрирован в пожарном депо, система добавляет новый документ в пожарное депо.

Я уже делаю код, подобный приведенному ниже, если я пытаюсь добавить элемент, который уже зарегистрирован, он успешно пересчитывает количество, но проблема в том, что когда я хочу добавить новый элемент (который не зарегистрирован в базе данных), он не работает. Может кто-нибудь исправить мой код.

final FirebaseFirestore db = FirebaseFirestore.getInstance();

        merk = etMerk.getText().toString().trim();
        type = etType.getText().toString().trim();
        typemerk = type + " - " + merk;
        qty = etQty.getText().toString().trim();
        price = etPrice.getText().toString().trim();
        date = datetime.getText().toString();

        final Map<String, Object> stock = new HashMap<>();
        stock.put("date", date);
        stock.put("type", typemerk);
        stock.put("qty", qty);
        stock.put("price", price);
        stock.put("merk", merk);


        final FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
        final CollectionReference documentReference = rootRef.collection("watchlist");
        Query query = documentReference.whereEqualTo("type", typemerk);
        query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(Tag.ITEM, document.getId() + "=>" + document.getData());

                        String id = document.getString("id");
                        String oldqty = document.getString("qty");
                        Integer i = Integer.parseInt(oldqty) + Integer.parseInt(qty);
                        String newQty = String.valueOf(i);

                        Map<Object, String> map = new HashMap<>();
                        map.put("qty", newQty);
                        rootRef.collection("watchlist").document(document.getId()).set(map, SetOptions.merge());
                        Toast.makeText(AddItemActivity.this, "Berhasil menambah stok", Toast.LENGTH_SHORT).show();
                        progressBar.setVisibility(View.GONE);
                    }
                } else {
                    Log.d(Tag.ITEM, "not register in DB", task.getException());
                    Toast.makeText(AddItemActivity.this, "new item to database", Toast.LENGTH_SHORT).show();
                    documentReference
                            .add(stock)
                            .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                                @Override
                                public void onSuccess(DocumentReference documentReference) {
                                    Toast.makeText(AddItemActivity.this, "Berhasil Memasukkan Barang ke Stok", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                    etMerk.setText("");
                                    etType.setText("");
                                    etQty.setText("");
                                    etPrice.setText("");
                                    etMerk.setFocusable(true);
                                }
                            })
                            .addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    Toast.makeText(AddItemActivity.this, "Gagal Memasukkan stok, silahkan coba lagi.", Toast.LENGTH_SHORT).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            });
                }
            }
        });
    }

1 Ответ

0 голосов
/ 28 июня 2019

Вы должны убедиться, что ваш запрос успешно возвращен и что он не пустой.Он может вернуть пустой результат, если запрос был обработан, но не было найдено соответствующего результата.

 FirebaseFirestore db = FirebaseFirestore.getInstance();

    db.collection("myCollection")
            .whereEqualTo("myQuery", myQueryValue)
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {

                    boolean documentExists;

                    if(task.isSuccessful()){
                        Log.d("QueryResult", "Is query result empty: " + task.getResult().isEmpty());
                        documentExists = !task.getResult().isEmpty();

                    }else{
                        Log.e("QueryResult", "Error getting documents.", task.getException());
                        documentExists = false;
                    }

                    if(documentExists){
                        Log.d("QueryResult", "The document exists");
                        // Do whatever you need to do with the document
                    }else{
                        Log.d("QueryResult", "The document doesn't exist or there was an error retrieving it");
                        // Create the document or whatever else you need to do
                    }
                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...