我正在使用Firestore for Java在Java中编写小型应用程序。我正在尝试按集合中的纬度字段进行查询。我的收藏夹中有一些用户,该查询应返回这些用户-甚至浏览器中的Firestore控制台也会返回这些用户。
问题是我每次都会出错:
java.lang.RuntimeException:字段“纬度”不是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;
}
我在做什么错了?
答案 0 :(得分:1)
由于您要让API检索String
字段latitude
,因此错误通知您没有latitude
字段是字符串。正如documentation所说:
如果该值不是字符串,则抛出
RuntimeException
。
latitude
字段的值可能存储为数字,在这种情况下,您可以直接将其作为数字获取。由于该值很可能以双精度形式存储,因此可以通过调用getDouble
:
doc.getDouble("latitude")
或通过调用get
将其作为通用值并将其转换为字符串:
String.valueOf(doc.get("latitude"))
答案 1 :(得分:0)
由于您正在打印日志Log.d(TAG, doc.getString("latitude"));
代替该用法:
Log.d(TAG, String.valueOf(doc.getString("latitude")));