为了账号安全,请及时绑定邮箱和手机立即绑定

我应该如何获取文档字段并在另一个地图中将它们用于另一个集合?

我应该如何获取文档字段并在另一个地图中将它们用于另一个集合?

幕布斯7119047 2023-06-04 10:30:29
我应该如何从一个集合中获取文档字段并将它们组合起来以将新文档添加到另一个集合中?我附上了数据库的图片,它看起来如何,我想从集合显示中获取字段,并希望将其与其他一些数据一起更新到新集合: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您将有空。

查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信