如何从Firestore中具有特殊字符的文档中获取数据

时间:2018-11-30 15:15:11

标签: java android firebase google-cloud-firestore

我正在尝试从Firestore中获取数据,但是如果文档具有特殊字符(例如,圣保罗),并且仅在圣保罗中发生,则会得到null

工作查询:

db.collection("streets")
                .document("Arlington")
                .collection("street")
                .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                List<DocumentSnapshot> docSnap = task.getResult().getDocuments();
            }
        });

查询无效:

db.collection("streets")
                .document("São Paulo")
                .collection("street")
                .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                List<DocumentSnapshot> docSnap = task.getResult().getDocuments();
            }
        });

如果具有特殊字符,如何从文档中获取数据?

Firestore database structure

enter image description here

1 个答案:

答案 0 :(得分:1)

Firestore中的特殊字符没有问题。名称为São Paulo的文档应该可以正常工作。正如我在您的架构中看到的那样,该文档中没有任何字段,因此也以italic编写。因此,如果您尝试获取该文档,则这是预期的行为。

如果要获取集合中的所有文档,则需要像以下代码行那样遍历task.getResult()

yourCollectionRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                Log.d(TAG, document.getId() + " => " + document.getData());
            }
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

编辑:

db.collection("streets").document("São Paulo").collection("street").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                Log.d(TAG, document.getString("city"));
            }
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});