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

我应该如何从一个集合中获取文档字段并将它们组合起来以将新文档添加到另一个集合中?我附上了数据库的图片,它看起来如何,我想从集合显示中获取字段,并希望将其与其他一些数据一起更新到新集合

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);

                }


            }

        });

我只是无法将字段从一个集合映射到另一个集合,请指导我正确的方法。


幕布斯7119047
浏览 97回答 1
1回答

慕容3067478

当您尝试使用以下代码行添加username到您的时:postMappostMap.put("username", username);数据尚未从数据库加载完成,这是因为您添加到get()调用中的侦听器在查询完成后的一段未知时间后被调用。您不知道需要多长时间,可能需要几百毫秒到几秒才能获得数据。该onComplete()方法具有异步行为,这就是为什么您不能username以这种方式获得它的原因。快速解决此问题的方法是将与添加数据相关的所有代码块移动到方法postMap内部的 , onComplete()。在此您正在等待回调,username您将有空。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java