【问题标题】:How to retrieve data from a map inside a particular document of firestore如何从 Firestore 特定文档中的地图中检索数据
【发布时间】:2020-07-15 21:23:26
【问题描述】:

文档是用户 ID,我想从地图“地址”中检索特定用户的“地址 1”。

 private FirebaseFirestore mfirestore;
    DocumentReference docRef;

    private FirebaseAuth mAuth;
    private FirebaseUser user;



 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_address);
   mAuth = FirebaseAuth.getInstance();
        user = mAuth.getCurrentUser();
        uid = user.getUid();
        docRef = mfirestore.collection("user").document(uid);


    }

   @Override
    protected void onStart() {
        super.onStart();
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        if (document.getData().get("Address")!=null){
                            String Address=document.getData().get("Address").toString();
                           
                        }
                       
                    }





                } else {
                    Toast.makeText(UserAddress.this, task.getException().toString(), Toast.LENGTH_SHORT).show();
                }
            }
        });

我已检索到整个“地址”,但无法找到单独获取用户地址 1 的方法。

【问题讨论】:

  • 请编辑问题以显示您迄今为止尝试过的代码。请清楚该代码在哪里没有按您预期的方式工作,或者您在哪里遇到了该代码。
  • @DougStevenson 我已经上传了到目前为止我尝试过的代码以及我卡住的地方。现在请帮助我

标签: java android firebase google-cloud-firestore


【解决方案1】:

Map 类型的文档字段在 Java 中显示为类型 Map&lt;String, Object&gt;。如果您正在访问地图,则可以简单地投射它:

Map<String, Object> address = (Map<String, Object>) document.getData().get("Address");

现在您可以使用该地图访问其各个字段:

String address1 = (String) address.get("Address1");

理想情况下,您还应该在强制转换之前检查每个值的类型是否为空,否则您可能会引发异常。

【讨论】:

  • 感谢您帮助我。但是在这种方法中,我正在检索整个地址,然后从中取出 Address1 或 Address2,但是有没有办法只从 Address 中检索特定用户的 Address1 而无需检索整个地址。
  • 不,这是不可能的。您必须阅读整个文档才能获得其中的任何字段。
【解决方案2】:

这就是你在 Kotlin 中的做法。

db.collection("app-version")
        .get()
        .addOnSuccessListener { result ->
            for (document in result) {

                val versionNum = document.get("versionNumber").toString()
                binding.txtAppVersion.text = versionNum


            }
        }
        .addOnFailureListener { exception ->

            Toast.makeText(
                this, "No such document", Toast.LENGTH_SHORT
            )
                .show()
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2021-11-11
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2020-08-05
    • 2021-08-11
    • 2021-08-11
    相关资源
    最近更新 更多