コレクションの下で同じuid(状態のようなフィールドの1つ)を持つ異なるドキュメントの特定のフィールド(状態)の値を変更するにはどうすればよいですか?

フォルダーポール

ここに画像の説明を入力してください

I am making an eCommerce app in which when Add to cart button is pressed in ProductDetails activity, the details of that respective product is added under the "Pending" collection with the product id as the document name with the fields as shown in the photo. Now there will be multiple users adding the products but they are filtered with the help of whereEqualsTo("uid", user.getUid()). So my question is when I place the order in placeOrder activity, I want to change the value of the state field form cart to order for that particular uid. How to do that???

placeOrder.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            db.collection("Pending")
                    .whereEqualTo("uid", user.getUid())
                    .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    Map<String, Object> cartMap = new HashMap<>();
                    cartMap.put("state", "orders");
                    db.collection("Pending").document().update(cartMap)
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                          finish();
                        }
                    });
                }
            });
        }
    });
Alex Mamo

コードには2つの問題があります。1つ目は、.document()引数を渡さずメソッドを呼び出すことです。これにより、実際に新しいIDが作成されます。2番目の問題は、結果を得るためにループしていないことです。したがって、これを解決するには、次のコード行を使用してください。

placeOrder.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        db.collection("Pending")
                .whereEqualTo("uid", user.getUid())
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                db.collection("Pending").document(document.getId()).update("state", "orders")
                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                //finish();
                                            }
                                        });
                            }
                        }
                    }
                });
    }
});

またfinish();、最初の更新が完了すると、呼び出しによってアクティビティが終了することにも注意してください。これが、その行にコメントした理由です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ