2017-09-01 9 views
1

FirebaseDataSnapshotをnullをカスタムJavaオブジェクトに実装しています。私はこのサイトを使っていくつかの答えを追うことでこの問題を解決しようとしていますが、自分のコードでどこが正確な問題か分かりません。 は、ここで私はとても親切に私はこの問題以下enter image description hereAndroidのFirebase DataSnapshotクラスがnullをカスタムJavaオブジェクトに返す

modelでの解決を助ける私のscreenshotfirebase databaseのを添付しています。

 public class ChatModel { 

    private String messege; 
    private String user; 
    private int intType; 

    public ChatModel(){} 

    public ChatModel(String messege, String user, int intType) { 
     this.messege = messege; 
     this.user = user; 
     this.intType = intType; 
    } 


    public String getMessege() { 
     return messege; 
    } 

    public void setMessege(String messege) { 
     this.messege = messege; 
    } 

    public String getUser() { 
     return user; 
    } 

    public void setUser(String user) { 
     this.user = user; 
    } 

    public int getIntType() { 
     return intType; 
    } 

    public void setIntType(int intType) { 
     this.intType = intType; 
    } 
} 

ここに私のactivityコードです。

DatabaseReference messagesReference = reference1.child("messages/"+ UserDetails.username + "_" + UserDetails.chatWith); 
     Log.e("messages URL "," ==>"+messagesReference); 

      messagesReference .addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

       Log.e("messages Referencev "," ==>"+dataSnapshot.toString()); 

       ChatModel map = dataSnapshot.getValue(ChatModel.class); 
       String message = map.getMessege(); 
       String userName = map.getUser(); 

       Log.e("message "," ==>"+message); // Here I am getting null value 

      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 

      } 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

およびlogcatこのようなメッセージを表示します。
==> DataSnapshot {キー= -KslrqBPRMNKkWQO15h_、値= {メッセージ=こんにちは。これはsakibで、ユーザー= sakib}}

+0

ヌル値を返す 'message'変数の中で –

答えて

3

あなたキーは、なぜそれがあなたのスクリーンショットとあなたのChatModelクラスを確認し、null値を返しますだ不一致ですあなたのChatModelクラス変数からstrを削除し、ゲッターセッターを再度生成してください。

これはあなたを助けるかもしれません。

public class ChatModel { 

    private String messege; 
    private String user; 
    private int intType; 
    // TODO generate getter setter again 
} 

あなたがマップを経由して値を取得するだけでなく

Map<String,String> map=(Map<String,String>)dataSnapshot.getValue(); 
String message = map.get("message"); 
String userName = map.get("user"); 
Log.e("message "," ==>"+message); 
+0

ありがとうございました。私の助けを借りてくれてありがとうございますが、***のようなエラーが表示されます。DatabaseException:java.lang.String型のオブジェクトをfirebasechat.com.firebasechat .Model.ChatModel *** –

+0

@SakibSyed私は私の答えに変更を加えました。今すぐお試しください – akhilesh0707

+0

@SakibSyedしましたか? – akhilesh0707

0

モデル

private String message; 
public String getMessage(){ return message;} 

の名前を変更しようとすることができるいずれかの私は、同じ問題を持っていたし、私は正確な特性を命名した後、それが働きましたfirebaseデータベースに名前が付けられているようです。

+0

@ベン・デンジャー私はちょうどモデル***に***メッセージ***の名前を変更しているが、それでも*** E /メッセージ:==> null ***を 'logcat'に表示しています –

+0

子供がいませんか?あなたはノード "sakib_testing"のリスナーを追加しています、私はあなたがDatasnapshot.getchildren()を反復して、それをchatmodelオブジェクトに変換しなければならないと思います –

関連する問題