我正在使用Java中的Android使用Firestore编写小型应用程序。我试图通过集合中的纬度字段查询。我的集合中有一些用户,应该通过此查询返回 - 甚至浏览器中的Firestore控制台也返回这些用户。
问题是我每次都会出现错误:
java.lang.runtimeException:field'latitude'不是java.lang.string
我的代码:
public Map<String, Object> getUsersBasedOnBounds2(LatLngBounds bounds){
db = FirebaseFirestore.getInstance();
Query query = db.collection(collection).whereGreaterThanOrEqualTo("latitude", (int)bounds.northeast.latitude);
query.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
Log.d(TAG, queryDocumentSnapshots.getDocuments().toString());
for (QueryDocumentSnapshot doc : queryDocumentSnapshots){
Log.d(TAG, doc.getString("latitude"));
}
}
});
return null;
}
我在做什么错?
由于您要求API检索String
字段latitude
,因此该错误告诉您没有latitude
字段是`'字符串。正如文档所说:
如果值不是字符串,则将
RuntimeException
投掷。
latitude
字段的值很可能被存储为一个数字,在这种情况下,您可以直接将其作为数字获取。由于该值很可能被存储为双重,因此可以通过调用getDouble
:
doc.getDouble("latitude")
或通过调用get
并将其转换为字符串:
String.valueOf(doc.get("latitude"))
因为您正在打印log Log.d(TAG, doc.getString("latitude"));
而不是使用:
Log.d(TAG, String.valueOf(doc.getString("latitude")));