我正在尝试从firebase数据库读取数据,但每次DataSnapshot都给出Null值,我能够更新数据但无法读取数据。
任何人都可以帮助我
private void showData(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
UserInformation uInfo = new UserInformation();
uInfo.setName(ds.child(userID).getValue(UserInformation.class).getName()); //set the name
uInfo.setEmail(ds.child(userID).getValue(UserInformation.class).getEmail()); //set the email
uInfo.setPhone_num(ds.child(userID).getValue(UserInformation.class).getPhone_num()); //set the phone_num
//display all the information
Log.d(TAG, "showData: name: " + uInfo.getName());
Log.d(TAG, "showData: email: " + uInfo.getEmail());
Log.d(TAG, "showData: phone_num: " + uInfo.getPhone_num());
Toast.makeText(this,uInfo.getName().toString(),Toast.LENGTH_SHORT).show();
ArrayList<String> array = new ArrayList<>();
array.add(uInfo.getName());
array.add(uInfo.getEmail());
array.add(uInfo.getPhone_num());
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
mListView.setAdapter(adapter);
}
}
我从
调用此函数 myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
try {
showData(dataSnapshot);
}catch (Exception e)
{
toastMessage("datasnapshow Exception"+e);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这会给我Null Exception。我坚持这个问题任何人都可以帮助我。数据库结构:
{
myfirebase284
m0p7r9ryj5Mr22NVWUt1DcYTjqG2
email: "pema@gmail.com"
name: "pema"
phone_num: 9990480514
}
答案 0 :(得分:0)
如果要显示数据,则无需创建UserInformation
类的新对象。您需要从UserInformation
对象获取dataSnapshot
个对象。因此,为了实现这一点,请进行以下更改。改变这一行:
UserInformation uInfo = new UserInformation();
与
UserInformation uInfo = dataSnapshot.getValue(UserInformation.class);
String name = uInfo.getName();
String email = uInfo.getEmail();
String phone_num = uInfo.getPhone_num();
考虑到getName()
,getEmail()
和getPhone_num()
是模型类中的公共getter。
也从for循环中取出ArrayList<String> array = new ArrayList<>();
。
根据您使用String
类读取数据的数据库结构,请使用以下代码:
DatabaseReference yourRef = FirebaseDatabase.getInstance().getReference().child(userId);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String email = (String) dataSnapshot.child("email").getValue();
String name = (String) dataSnapshot.child("name").getValue();
String phone_num = (String) dataSnapshot.child("phone_num").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);
其中userId
是push()
方法生成的唯一ID。
如果您想了解有关阅读和写入Firebase数据库的更多信息,请查看官方doc。
希望它有所帮助。