【发布时间】:2019-08-14 04:12:06
【问题描述】:
每次活动开始时,Firebase 文档字段都会重置,我需要它们持续存在。
正在使用“setOptions.merge()”在 onResume 中创建集合和文档,其中文档值设置为字符串为 null,数组为 emptyList。
@Override
protected void onResume() {
super.onResume();
//Creating the document if it does not already exist.
Map<String, Object> read_book = new HashMap<>();
read_book.put("read_pages", Collections.emptyList());
read_book.put("total_pages", null);
fireStoreDB.collection("user_" + user.getId).document("book_" + book.getId())
.set(read_book, SetOptions.merge())
.addOnSuccessListener(aVoid ->
Log.d("Activity", "FirestoreDB => created empty read_pages and total_pages"))
.addOnFailureListener(e ->
Log.d("Activity", "Firestore failed to create empty read_pages and total_pages" + e));
}
private void pageFlip(String currentPage, String totalPages){
// Add read page to array (no duplicates)
fireStoreDB.collection("user_" + user.getId).document("book_" + book.getId())
.update("read_pages", FieldValue.arrayUnion(currentPage))
.addOnSuccessListener(aVoid ->
Log.d("Activity", "FirestoreDB => updated read_pages " + currentPage))
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("Activity", "FirestoreDB => failed to update read_pages" + e);
}
});
// Set total book pages number
fireStoreDB.collection("user_" + user.getId).document("book_" + book.getId())
.update("total_pages", totalPages)
.addOnSuccessListener(aVoid ->
Log.d("Activity", "FirestoreDB => updated total_pages " + totalPages))
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("Activity", "FirestoreDB => failed to update total_pages" + e);
}
});
}
使用上面的代码,每次调用 onResume 时,该字段都会被重置为 null 和空列表。
我需要 total_pages 值和 read_pages 数组在 Activity 重新启动时保持不变,并可以使用 FieldValue.arrayUnion 向 read_pages 数组添加新值。
实现我的用例的有效方法是什么?
【问题讨论】:
标签: android firebase google-cloud-firestore