【发布时间】:2019-07-13 19:56:04
【问题描述】:
当我想更新用户文档中的 recipIds 数组列表时,数组列表会被擦除并设置新值。
我尝试获取旧集合,然后为其添加新值并进行更新,但这似乎有点矫枉过正。
public void saveRecipeIds(User user) {
String currentUserId = mAuth.getCurrentUser().getUid();
Map<String, Object> userMap = new HashMap<>();
userMap.put("recipeIds", user.getRecipesIds());
db.collection("users").document(currentUserId).update(userMap);
}
我想用新值更新我的数组列表而不擦除旧列表数据。
这是它在 Firestore 中的外观:
已编辑:
public void saveRecipeIds(User user) {
String currentUserId = mAuth.getCurrentUser().getUid();
Map<String, Object> userMap = new HashMap<>();
userMap.put("recipeIds", user.getRecipesIds());
db.collection("users").document(currentUserId)
.update("recipeIds", FieldValue.arrayUnion(userMap));
}
编辑
public void saveRecipeIds(User user) {
String currentUserId = mAuth.getCurrentUser().getUid();
// Map<String, Object> userMap = new HashMap<>();
// userMap.put("recipeIds", user.getRecipesIds());
db.collection("users").document(currentUserId)
.update("recipeIds", FieldValue.arrayUnion(user.getRecipesIds()));
}
错误:
java.lang.IllegalArgumentException: Invalid data. Nested arrays are not supported
at com.google.firebase.firestore.core.UserData$ParseContext.createError(com.google.firebase:firebase-firestore@@18.2.0:293)
at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@18.2.0:261)
at com.google.firebase.firestore.UserDataConverter.convertAndParseFieldData(com.google.firebase:firebase-firestore@@18.2.0:202)
at com.google.firebase.firestore.UserDataConverter.parseArrayTransformElements(com.google.firebase:firebase-firestore@@18.2.0:440)
at com.google.firebase.firestore.UserDataConverter.parseSentinelFieldValue(com.google.firebase:firebase-firestore@@18.2.0:346)
at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@18.2.0:248)
at com.google.firebase.firestore.UserDataConverter.convertAndParseFieldData(com.google.firebase:firebase-firestore@@18.2.0:202)
at com.google.firebase.firestore.UserDataConverter.parseUpdateData(com.google.firebase:firebase-firestore@@18.2.0:176)
at com.google.firebase.firestore.DocumentReference.update(com.google.firebase:firebase-firestore@@18.2.0:213)
at com.example.cookingapp.Repository.UserRepository.saveRecipeIds(UserRepository.java:143)
at com.example.cookingapp.ViewModels.UserViewModel.saveRecipeIds(UserViewModel.java:57)
at com.example.cookingapp.Views.Fragments.Home.FinishRecipeFragment$1.onClick(FinishRecipeFragment.java:111)
at android.view.View.performClick(View.java:6199)
at android.widget.TextView.performClick(TextView.java:11090)
at android.view.View$PerformClick.run(View.java:23647)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
【问题讨论】:
标签: java android firebase google-cloud-firestore