2017-04-06 3 views
-2

Firebaseユーザ情報を格納するモデルクラスがあります。モデルクラスの中には、内部にすべてのデータを格納するHashMapがあります。データを保存したら、HashmapをFirebaseデータベースにプッシュします。値は正常に保存されますが、値にアクセスできません。私がそれらにアクセスしようとするたびに、nullのオブジェクト参照で仮想メソッドを呼び出そうとしているというエラーが表示されます。Firebaseクラスを取得しようとしているときにnullのオブジェクト参照があります。

mDatabase.child("users").child(mUserId).addChildEventListener(new ChildEventListener() { 

@Override 
public void onChildAdded(DataSnapshot ChildSnapshot, String s) { 

// These two lines of code give the error. 
User author = ChildSnapshot.child("profile").getValue(User.class); 
String author_username = author.getUsername(); 

これらは私にエラーを与えます。スナップショットの子からデータを取得しようとしています。なぜこれは私にエラーを与えるのですか?これを行うより良い方法はありますか?

JSON Firebaseのスナップショット:

enter image description here

Modelクラス:他の誰かがこの問題に苦しんでいた

//TODO model class for the user. This way I can set the values for each user. I will be adding more values in the future. 

public class User { 


public HashMap<String, String> hashMap = new HashMap<String,String>(); 
public User() { 

} 
    public User(String username) { 
    hashMap.put("username",username); 

} 


public String getUsername(){ 
    return hashMap.get("username"); 
} 
} 
+0

あなたのFirebase DBスナップ –

+0

を編集し、スナップショット行を追加しました。 –

+0

あなたのFirebaseデータベースを意味します。 –

答えて

0

ケースでは、私は答えを与えたかったです。私のChildEventListenerの内部では、プロファイルはこの状況のキーです。したがって、ChildSnapshot.child("profile").getValue(User.class)を使用すると、null値が返されます。また、(私はこれがなぜなのかよく分かりません)ユーザー名の値は、メッセージを格納するために使用されたUser_messageという別のクラスに格納されていました。更新されたコードは次のようになります。

mDatabase.child("users").child(mUserId).addChildEventListener(new ChildEventListener() { 

@Override 
public void onChildAdded(DataSnapshot ChildSnapshot, String s) { 


User_message author = ChildSnapshot.getValue(User_message.class); 
String author_username = author.getUsername(); 
0

私は同じ問題に直面しており、5時間以上を過ごしました。私はモデルのDefault Constructorを追加しました。これが私の問題を解決します。

public class User { 

public String email; 
public String name; 

public User() { 
} 

public User(String email, String name) { 
    this.email = email; 
    this.name = name; 
}} 

これがあなたに役立つことを願っています。ありがとう

+0

回答ありがとうございますが、私はすでにデフォルトのコンストラクタを持っていました。クラスの私のスペーシングはちょうど悪かったので、見るのは難しいです。 –

関連する問題