簡體   English   中英

Android Firestore從多個位置獲取集合

[英]Android Firestore Get Collections From Multiple Locations

我開始了一個新項目。 我正在嘗試使用Firebase。 我嘗試將兩個集合合並,然后嘗試將它們合並。

我的數據庫結構:

  • 產品
    • [產品編號]
      • 產品名稱:“測試名稱”
      • 價格:“ 17 $”
      • userid:[userid]
  • 用戶數
    • [用戶身份]
      • 名稱:“ testname”
      • 圖片:“ testimage.jpg”
      • 郵件:“ test@gmail.com”

我的代碼:

public void getProductData(final FireCallback.Product fireCallback){
    final List<ProductModel> productModelList = new ArrayList<>();
    firestore.collection("products").get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (DocumentSnapshot document : task.getResult()) {
                            final ProductModel productModel = document.toObject(ProductModel.class);
                            final String userId = productModel.getUserId();

                            DocumentReference docRef = firestore.collection("users").document(userId);
                            docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                                @Override
                                public void onSuccess(DocumentSnapshot documentSnapshot) {
                                    productModel.setUserModel(documentSnapshot.toObject(UserModel.class));
                                }
                            });
                            productModelList.add(feedModel);
                        }
                        fireCallback.onProduct(productModelList);
                    } }});

我的用戶模型來晚了。 而且我無法設置productModel.setUserModel,因為用戶數據來晚了。 我應該怎么做才能正確地填寫清單。

謝謝!

要解決此問題,請移動productModelList的聲明:

final List<ProductModel> productModelList = new ArrayList<>();

onComplete()方法中,就在for循環開始之前。 該列表也應該在該方法內部,否則將為空,這是由於該方法的異步行為,甚至在您嘗試將這些對象添加到列表之前都被調用。

為了更好地理解,我建議您從這篇文章以及該視頻中看到我的答案。

我編輯您的代碼。 希望對您有所幫助。

        public void getProductData(final FireCallback.Product fireCallback){
        final List<ProductModel> productModelList = new ArrayList<>();
        firestore.collection("products").get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (final DocumentSnapshot document : task.getResult()) {


                                DocumentReference docRef = firestore.collection("users").document(userId);
                                docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                                    @Override
                                    public void onSuccess(DocumentSnapshot documentSnapshot) {
                                        final ProductModel productModel = document.toObject(ProductModel.class);
                                        final String userId = productModel.getUserId();
                                        productModel.setUserModel(documentSnapshot.toObject(UserModel.class));
                                    }
                                });
                                productModelList.add(feedModel);
                            fireCallback.onProduct(productModelList);
                            }
                        } }});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM