我应该如何从一个集合中获取文档字段并将它们组合起来以将新文档添加到另一个集合中?我附上了数据库的图片,它看起来如何,我想从集合显示中获取字段,并希望将其与其他一些数据一起更新到新集合: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); } } });我只是无法将字段从一个集合映射到另一个集合,请指导我正确的方法。
1 回答
慕容3067478
TA贡献1773条经验 获得超3个赞
当您尝试使用以下代码行添加username
到您的时:postMap
postMap.put("username", username);
数据尚未从数据库加载完成,这是因为您添加到get()
调用中的侦听器在查询完成后的一段未知时间后被调用。您不知道需要多长时间,可能需要几百毫秒到几秒才能获得数据。该onComplete()
方法具有异步行为,这就是为什么您不能username
以这种方式获得它的原因。
快速解决此问题的方法是将与添加数据相关的所有代码块移动到方法postMap
内部的 , onComplete()
。在此您正在等待回调,username
您将有空。
添加回答
举报
0/150
提交
取消