2017-08-27 40 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?

相關問題