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

时间:2015-11-30 10:28:32

标签: java android firebase

根据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("dinosaurs/height")会使用FirebaseException消息引发Invalid key: dinosaurs/height. Keys must not contain '/', '.', '#', '$', '[', or ']'

确实,密钥被以下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();
}

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

1 个答案:

答案 0 :(得分:1)

嵌套孩子订购的能力为added in version 2.4 of the Firebase SDK for Java

我刚尝试在较早版本的SDK上使用/,并获得与您相同的错误。所以我最好的办法是忘记更新您的项目以使用Firebase SDK 2.4版。