从firebase实时数据库获取数据的源代码:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("hotel");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
Log.w(TAG, "Failed to read value.", error.toException());
}
});
它说错误是这样的:
com.google.firebase.database.DatabaseException:无法将java.util.HashMap类型的值转换为String
我已经尝试了一些教程,但我找不到一个。另外,我试试这个:
HashMap value = DataSnapshot.getValue(HashMap.class);
它也结束了错误。我该如何渲染这个HashMap数据?
答案 0 :(得分:9)
您将字符串的 HashMap 作为键,将对象作为值,将其映射为如下所示。
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
Log.d(TAG, "Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
Log.w(TAG, "Failed to read value.", error.toException());
}
});
或者我们可以将其解析为某个模型而不是对象。
<强>更新强> 用它来解析
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
答案 1 :(得分:1)
假设hotel
节点是Firebase root的直接子节点,要获取这些值,请使用以下代码
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference hotelRef = rootRef.child("hotel");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String address = ds.child("address").getValue(String.class);
String name = ds.child("name").getValue(String.class);
Log.d("TAG", address + " / " + name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
hotelRef.addListenerForSingleValueEvent(eventListener);
输出将是:
Surubaya / Hotel Suridan
Bandung / Hotel Santika
//and so on