从实时Firebase数据库检索字符串

时间:2019-07-25 08:52:59

标签: java firebase firebase-realtime-database

我正在尝试从数据库中检索一个字符串,但是每次尝试它都会显示一个错误,提示“无法将java.util.HashMap类型的值转换为String”,Stackoverflow上的一个人遇到了同样的问题,回答对他有所帮助,但仍然对我不起作用

我试图将代码映射为哈希图,但它一直显示错误

这是模型

public ButtonInformationSend(String testoNotifica) {
    TestoNotifica = testoNotifica;
}

public String getTestoNotifica() {
    return TestoNotifica;
}

public void setTestoNotifica(String TestoNotifica) {
    this.TestoNotifica = TestoNotifica;
}

这是代码

myRef.addValueEventListener(new ValueEventListener() {
    @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        ButtonInformationSend buttonInformationSend = dataSnapshot.getValue(ButtonInformationSend.class);
        creaNotifica(buttonInformationSend);
    }

    @Override public void onCancelled(@NonNull DatabaseError databaseError) {}
});

我得到的错误是无法将类型java.util.HashMap的值转换为字符串

2 个答案:

答案 0 :(得分:1)

在Java中,您不能将Hashmap直接转换为字符串,因为它们是两种不同的类型。

DataSnaphhot.getValue()
如果您的引用指向数据库中的数据节点,则

返回在您的引用处找到的所有数据的哈希图。您需要做的是从数据快照中获取哈希图,然后从该哈希图中获取所需的相关数据,这是一个示例:

            HashMap<String, Object> data = (HashMap<String,Object>) dataSnapshot.getValue();
                try {
                    String value1 = (String) data.get("Value1");
                    String value2 = (String) data.get("Value2");
                    String value3 = (String) data.get("Value3");
                } catch (Exception e) {
                    e.printStackTrace();
                }

希望这会有所帮助。

答案 1 :(得分:1)

如果您有此数据库:

Users
  id
   name : peter

然后变量myRef应该引用节点id以便能够检索到String,如果myRef引用根节点,则会得到错误:

  

无法将类型java.util.HashMap的值转换为String

因此,您应该执行以下操作:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users");
ref.child(id).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
              String name = dataSnapshot.child("name").getValue(String.class);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });