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

Ham*_*mza 7 android firebase google-cloud-firestore

像firebase实时数据库一样,我不想在firestore集合中存储空/空值。所以我如何从firestore集合中跳过或删除空字段 在此处输入图片说明

下面的功能将数据保存到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);
                }
            });

}
Run Code Online (Sandbox Code Playgroud)

Ham*_*mza 9

我找到了一种使用 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;
}
Run Code Online (Sandbox Code Playgroud)

进而

documentReference
.set( removeNullValues( userObject) )
.addOnSuccessListener {}
Run Code Online (Sandbox Code Playgroud)

如果您正在使用 proguard,请确保添加此规则

-keepclassmembers enum * { *; }
Run Code Online (Sandbox Code Playgroud)