java - 我应该如何获取文档字段并将它们用于另一个地图的另一个集合?
问题描述
我应该如何从一个集合中获取文档字段并将它们组合起来以将新文档添加到另一个集合?我附上了数据库的图片,它看起来如何,我想从集合显示中获取字段,并希望将其与其他一些数据一起更新到新集合:
private void savePost(String mPostTitle, String mPostContent, String mlistSpinnerC) {
final DocumentReference docRef = FirebaseFirestore.getInstance().collection("users").document(mauth.getCurrentUser().getUid());
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
String username = (String)
document.get("username");
String email= (String) document.get(email);
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
postMap.put(Constants.POSTTTITLE, mPostTitle);
postMap.put(Constants.POSTCATEGORY, mlistSpinnerC);
postMap.put(Constants.POSTCONTENT, mPostContent);
postMap.put(Constants.TIMESTAMP, (System.currentTimeMillis()/1000));
postMap.put(Constants.USER_ID,mauth.getCurrentUser().getUid());
postMap.put("username", username);
PostsRef.document().set(postMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Intent toHomeActivity = new Intent(AddPostActivity.this, MainActivity.class);
startActivity(toHomeActivity);
}
}
});
我只是无法将字段从一个集合映射到另一个集合,请指导我正确的方法。
解决方案
当您尝试使用以下代码行将其添加username
到您的时:postMap
postMap.put("username", username);
数据尚未从数据库加载完成,这是因为您添加到get()
调用中的侦听器在查询完成后的某个未知时间后被调用。您不知道需要多长时间,可能需要几百毫秒到几秒钟才能获得数据。该onComplete()
方法具有异步行为,这就是您无法username
以这种方式获得它的原因。
快速解决此问题的方法是将所有与将数据添加到方法postMap
内的 ,相关的代码块onComplete()
。在这种情况下,您正在等待回调并且username
您将可用。否则,我建议您从这篇文章中查看我的 anwser 的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。
推荐阅读
- javascript - 删除时出错:无法读取未定义的属性“id”
- javascript - 使用 map reduce 函数而不是 forEach 重构 JS 对象
- xctest - 如何构建 UI 测试方法以访问登录页面后面的页面?
- matrix - 如何从多序列比对构建经验密码子替换矩阵
- vue.js - 在 v-data-table Vuetify 中添加超链接
- python - PermissionError:[Errno 13] 权限被拒绝:“text_file”
- python - 如何将变量传递给类定义函数“指针”?
- electron - 如何在 Electron JS 中使用 Google Analytics Embed API
- authentication - VLC VLCJ 流密码保护什么都不做
- wordpress - 用于高级自定义字段的 Gatsby 背景图像和 WPGraphQL