无法在火堆中按字符串查询。RuntimeException Field "latitude" 不是 java.lang.String



我正在使用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")));

最新更新