Java 使用Firebase Android API按嵌套数据排序查询时出现异常

Java 使用Firebase Android API按嵌套数据排序查询时出现异常,java,android,firebase,Java,Android,Firebase,根据Firebase文档,应该可以通过将完整路径传递到orderByChild()方法,按深度嵌套的子级对查询进行排序,如下所示 Firebase ref = new Firebase("https://dinosaur-facts.firebaseio.com/dinosaurs"); Query queryRef = ref.orderByChild("dimensions/height"); queryRef.addChildEventListener(new ChildEventList

根据Firebase文档,应该可以通过将完整路径传递到
orderByChild()
方法,按深度嵌套的子级对查询进行排序,如下所示

Firebase ref = new Firebase("https://dinosaur-facts.firebaseio.com/dinosaurs");
Query queryRef = ref.orderByChild("dimensions/height");
queryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChild) {
        DinosaurFacts facts = snapshot.getValue(DinosaurFacts.class);
        System.out.println(snapshot.getKey() + " was " + facts.getHeight() + " meters tall");
    }
});
但是调用orderByChild(“恐龙/高度”)会抛出一个
FirebaseException
,并显示消息
无效键:恐龙/高度。键不能包含“/”、“.”、“#”、“$”、“[”或“]”

实际上,密钥被以下firebase方法拒绝

private static final Pattern INVALID_KEY_REGEX = Pattern.compile("[\\[\\]\\.#\\$\\/\\u0000-\\u001F\\u007F]");

private static boolean isValidKey(String key) {
    return key.equals(".info") || !INVALID_KEY_REGEX.matcher(key).find();
}

使用对象的完整路径进行查询的正确方法是什么?

通过嵌套子对象进行排序的功能是

我刚刚尝试在旧版本的SDK上使用
/
,得到了与您相同的错误。因此,我的最佳选择是您忘记更新项目以使用Firebase SDK 2.4版