无法在Firestore中按字符串查询。 RuntimeException字段“ latitude”不是java.lang.String

时间:2019-07-06 11:57:54

标签: java android google-cloud-firestore

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

我在做什么错了?

2 个答案:

答案 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")));