我正在为我的应用程序使用firebase数据库,我将用户保存在其中。
这是我的UserInformation
课程:
public class UserInformation {
private String email1;
private String Password1;
public HashMap<String, Boolean> SayingsLevels=new HashMap<>();
public HashMap<String, Boolean> songs=new HashMap<>();
public UserInformation (String email, String Password){
this.email1=email;
this.Password1=Password;
SayingsLevels.put("1", false);
SayingsLevels.put("2", false);
SayingsLevels.put("3", false);
songs.put("1", false);
songs.put("2", false);
songs.put("3", false);
}
我在主要活动中用这段代码保存了它:
firebaseUser=FirebaseAuth.getInstance().getCurrentUser();
UserInformation user=new UserInformation(email1,password1);
String id=firebaseUser.getUid();
mDatabaseReference.child("user").child(id).setValue(user);
现在,我希望获取存储在我的数据库中的hashmap数据。 我使用了以下代码:
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mDatabase = FirebaseDatabase.getInstance().getReference();
firebaseuser=FirebaseAuth.getInstance().getCurrentUser();
id=firebaseuser.getUid();
for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren() ){
UserInformation user= dataSnapshot1.child("user").child(id).getValue(UserInformation.class);
}
但是对于变量用户我一直都在null
,我做错了什么?
谢谢你的帮助!
答案 0 :(得分:1)
您需要在附加监听器之前初始化mDatabase
:
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
firebaseuser=FirebaseAuth.getInstance().getCurrentUser();
id=firebaseuser.getUid();
for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren() ){
UserInformation user= dataSnapshot1.child("user").child(id).getValue(UserInformation.class);
}
但请注意,此代码将下载整个数据库,因此请查找单个用户的数据。随着应用程序用户群的增长,您将下载越来越多不需要的数据。
我建议只下载当前用户的数据:
mDatabase = FirebaseDatabase.getInstance().getReference();
firebaseuser=FirebaseAuth.getInstance().getCurrentUser();
id=firebaseuser.getUid();
mDatabase.child("users").child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserInformation user= dataSnapshot.getValue(UserInformation.class);
最后:我建议您通过研究以及相关问题来学习如何解决NullPointerException
问题:What is a NullPointerException, and how do I fix it?