这是我从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结构
答案 0 :(得分:2)
您发布了两个不同的代码,其中一个为您提供了正确的答案:
String stringGeoPoint = products.getLocation().get("geoPoint").toString();
,此行代码显示null:
GeoPoint geoPoint = documentSnapshot.getGeoPoint(stringGeoPoint);
原因:
第一个代码背后的原因可以正常工作,因为在检索数据时,已经为documents字段创建了数据模型。您的方法为getLocation()
,它将返回Location数组。然后,通常可以通过传递hashmap的键来查看hashmap数组
位置是Hashmap<String, String>
的数组。
第二个代码对您不起作用,因为documentSnapshot下没有字段。