如何在嵌套对象中获取Firestore GeoPoint值?

时间:2019-09-23 10:54:58

标签: android firebase google-cloud-firestore

这是我从Firestore DB生成geopoint数据类型的临时代码

firestoreDb.collection("products").document(productId).get()
  .addOnSuccessListener(documentSnapshot -> {
     Products products = documentSnapshot.toObject(Products.class); 
     countryCode = Objects.requireNonNull(products.getAddress().get("countryCode")).toString();

     String stringGeoPoint = products.getLocation().get("geoPoint").toString();
     System.out.println(stringGeoPoint);
     //Output: GeoPoint { latitude=29.339555, longitude=169.715858 }

     GeoPoint geoPoint = documentSnapshot.getGeoPoint(stringGeoPoint);// ?
     //Output: null
  }

Products.class

public class Products{ 
   public Map<String, Object> address;
   public Map<String, Object> location;

   public Map<String, Object> getAddress(){return address;}
   public Map<String, Object> getLocation(){return location;}
}

我的Firestore结构

enter image description here

  • 产品
  • -> {productIds}
  • ------>标题(字符串)
  • ------>位置(地图)
  • ----------> geoPoint(GeoPoint)
  • ------>地址(地图)
  • ----------> countryCode(字符串)

1 个答案:

答案 0 :(得分:2)

您发布了两个不同的代码,其中一个为您提供了正确的答案:

String stringGeoPoint = products.getLocation().get("geoPoint").toString();

,此行代码显示null:

GeoPoint geoPoint = documentSnapshot.getGeoPoint(stringGeoPoint);

原因:

第一个代码背后的原因可以正常工作,因为在检索数据时,已经为documents字段创建了数据模型。您的方法为getLocation(),它将返回Location数组。然后,通常可以通过传递hashmap的键来查看hashmap数组

位置是Hashmap<String, String>的数组。

第二个代码对您不起作用,因为documentSnapshot下没有字段。