我应该如何从一个集合中获取文档字段并将它们组合起来以将新文档添加到另一个集合?我已附上picture数据库的外观如何,我想从集合显示中获取字段,并希望将其与其他一些数据一起更新到新集合:
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);
}
}
});
我无法将字段从一个集合映射到另一个集合,请指导我正确的方法。
最佳答案
当您尝试使用以下代码行将用户名
添加到postMap
时:
postMap.put("username", username);
数据尚未完成从数据库的加载,这是因为您添加到 get()
调用中的监听器在查询完成后的某个未知时间后被调用。您不知道需要多长时间,可能需要几百毫秒到几秒的时间才能获得数据。 onComplete()
方法具有异步行为,这就是为什么您无法以这种方式获取该用户名
。
此问题的快速解决方案是将所有与向 postMap
添加数据相关的代码块移至 onComplete()
方法内。在这里,您正在等待回调,并且您的用户名
将可用。否则我建议你看看我的答案的最后一部分 post 其中我解释了如何使用自定义回调来完成它。您还可以看看这个video 为了更好地理解。
关于java - 我应该如何获取文档字段并在另一个集合的另一个 map 中使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57448056/