簡體   English   中英

從Firestore獲取和更新數據-問題

[英]Get and update Data from Firestore - Problems

對於我的應用程序,我有很多場合需要檢索數據並將數據寫入Firestore。 我能夠寫新數據並獲取和顯示數據。 我也可以覆蓋一個類中的數據,但是盡管使用相同的方法,但現在在另一類中還是有麻煩。

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    FirebaseUser currUser = FirebaseAuth.getInstance().getCurrentUser();
    DocumentReference userDocRef = db.collection("Users").document(currUser.getEmail());
    //access current values saved under this user
    userDocRef.get().addOnSuccessListener(new 
    OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            User currentUser = documentSnapshot.toObject(User.class);
            warmups_skipped = currentUser.getWarmupsSkipped()+1;
            Log.d(TAG, "DocumentSnapshot successfully retrieved! " + warmups_skipped);

        }
    });

我可以在logCat中看到本地變量正在更改。 到目前為止一切都很好。 然后,我在之后立即調用此方法:

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    FirebaseUser currUser = FirebaseAuth.getInstance().getCurrentUser();
    DocumentReference userDocRef = db.collection("Users").document(currUser.getEmail());
    Map<String, Object> update = new HashMap<>();
    update.put(WARMUPSSKIPPED, getWarmups_skipped());
        userDocRef
                .set(update, SetOptions.merge()).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.d(TAG, "Document has been saved");
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d(TAG, "Document could not be saved");
        }
    });
    }

同樣在這里,我得到顯示的TAG消息,但是FireStore中什么都沒有改變。 我在另一個類中使用完全相同的第二種方法,在該類中,我不檢查什么已經在線,而只是覆蓋它。 非常感謝您的幫助!

好吧,我最終弄清楚了。 顯然我不能將這兩個動作分開,所以我將第二個方法放在第一個方法中,現在看來可以了。 但是,不能完全確定為什么導致變量是類變量,並且應該可以從這兩種方法中訪問它們。 如果其他人有這個問題,現在這對我來說是如何工作的:

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    FirebaseUser currUser = FirebaseAuth.getInstance().getCurrentUser();
    final DocumentReference userDocRef = db.collection("Users").document(currUser.getEmail());
    //access current values saved under this user
    userDocRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            User currentUser = documentSnapshot.toObject(User.class);
            warmups_skipped = currentUser.getWarmupsSkipped()+1;
            Map<String, Object> update = new HashMap<>();
            update.put(WARMUPSSKIPPED, warmups_skipped);
            userDocRef
                    .set(update, SetOptions.merge()).addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.d(TAG, "Document has been saved");
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d(TAG, "Document could not be saved" +e.toString());
                }
            });
            Log.d(TAG, "DocumentSnapshot successfully retrieved! " + warmups_skipped);
        }
    });

暫無
暫無

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

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