代码之家  ›  专栏  ›  技术社区  ›  Hamza

如何跳过firestore集合中的空/空变量?

  •  3
  • Hamza  · 技术社区  · 8 年前

    像firebase实时数据库一样,我不希望在firestore集合中存储空值。 enter image description here

    下面的函数将数据保存到firestore

    private void saveTofireStore(String path, User userObject,Class<?> classType){
    
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        documentReference = db.document(path);
        Log.d(TAG,""+documentReference.getPath());
       documentReference
                .set(userObject)
                .addOnCompleteListener(task -> {
                    if (task.isSuccessful()){
                      appearanceMutableLiveData.setValue(task.getResult());
                    }else {
                        appearanceMutableLiveData.setValue(null);
                    }
                });
    
    }
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Hamza    8 年前

    我找到了一个简单的方法,使用gson序列化对象,然后转换成映射,然后保存该对象。

    private Map<String, Object> removeNullValues(User userObject) {
        Gson gson = new GsonBuilder().create();
    
        Map<String, Object> map = new Gson().fromJson(
                gson.toJson(userObject), new TypeToken<HashMap<String, Object>>() {
                }.getType()
        );
    
        return map;
    }
    
        2
  •  0
  •   Doug Stevenson    8 年前

    必须构建一个映射,其中仅包含要存储的文档的属性。如果不想为字段存储空值,应该检查每个值是否为空。从 documentation 以下内容:

    Map<String, Object> city = new HashMap<>();
    city.put("name", "Los Angeles");
    city.put("state", "CA");
    city.put("country", "USA");
    
    db.collection("cities").document("LA")
            .set(city)
    

    无法使用默认对象序列化,也无法有选择地删除不符合条件的属性。对象序列化始终使用所有可用的对象属性,而不管其值如何。

    推荐文章