[英]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.