【问题标题】:How to avoid setting firestore document fields if already set如果已设置,如何避免设置 firestore 文档字段
【发布时间】: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


    【解决方案1】:

    你可以直接使用 set 方法和 SetOptions.merge() 不需要用空值初始化

    private void pageFlip(String currentPage, String totalPages){
    
      Map<String, Object> data = new HashMap<>();
            data.put("total_pages", totalPages);
            data.put("read_pages", FieldValue.arrayUnion(currentPage));
    
    
            // Add read page to array (no duplicates)
    
            fireStoreDB.collection("user_" + user.getId).document("book_" + book.getId())
                    .set(data, SetOptions.merge())
                    .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);
                        }
                    });
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 2019-06-07
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多