2017-08-27 39 views
0

我为我的应用使用了Firebase数据库,并将其中的用户保存在其中。 这是我UserInformation类:检索Firebase中的数据时出现Nullpointer异常

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

请与我们分享你的数据库结构体。 –

+0

@Elior:您可以通过点击[Firebase数据库控制台](https://console.firebase.google.com/project/_/database/data)中的“导出JSON”链接来获取此数据库结构。将其作为文本比屏幕截图更有用。 –

回答

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 S:What is a NullPointerException, and how do I fix it?

相关问题