从android中的firebase节点检索数据

时间:2017-06-12 14:25:00

标签: android firebase firebase-realtime-database

我无法从我的Firebase数据库数据转到Android应用,而Firebase监听器和数据快照文档实际上并没有帮助。

假设我的数据库的节点结构如下:

Contacts-->
       John : 1334255
       May :  3345777
       James : 5799862
       Ford : 4574878

如何直接从节点中检索具有键和值的联系人作为字符串,而不必将它们转换为某个对象(不是字符串对象)。

我希望能够将姓名(键)显示为联系人姓名,将数字(他们的值)显示为联系号码。

2 个答案:

答案 0 :(得分:0)

tl; dr将它们写为数字以外的其他内容

示例中的值为Long(整数)。假设他们是电话号码,你可能想要将它们存储为字符串。当您向Firebase写入值时,它会推断出类型和store it as one of the following

  • String(将出现在引号中)
  • Long(整数)
  • Double(十进制数)
  • Booleantruefalse没有引号)
  • Map<String, Object>(有孩子的钥匙)
  • List<Object>(有孩子的钥匙)

在您的情况下,由于您希望在读取时将其视为String类型,只需将其写为字符串:

如果您要设置客户端代码中的值,请在创建值时使用String类型。

如果您是从信息中心手动输入的,则可以将它们用引号括起来,也可以使用熟悉的格式(123) 456-7890等非数字字符。您输入的任何未评估为Long / Double / Boolean的值都将被解释为字符串。

答案 1 :(得分:0)

请尝试以下代码:

DatabaseReference contactsRef = FirebaseDatabase.getInstance().getReference().child("Contacts");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.getKey();
            String contactNumber = ds.getValue(String.class);
            Log.d("TAG", name + ": " + contactNumber);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
contactsRef.addListenerForSingleValueEvent(eventListener);

希望它有所帮助。