2016-12-22 1 views
0

私は単純なチャットアプリケーションを構築しようとしています。私はFirebaseを初めて熟知しています。データベースの構造はこれです:ここではW/ClassMapper:JavaでFirebaseListAdapterを使用しているときにセッター/フィールドがありません

enter image description here

は私のコードです:ここでは

databaseReference = FirebaseDatabase.getInstance().getReference().child("Chat"); 
    firebaseListAdapter = new FirebaseListAdapter<Room>(this, Room.class, android.R.layout.simple_list_item_1, databaseReference) { 
     @Override 
     protected void populateView(View v, Room room, int position) { 
      TextView textView = (TextView) v.findViewById(android.R.id.text1); 
      String roomName = this.getRef(position).getKey(); 
      textView.setText(roomName); 
     } 
    }; 
    ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setAdapter(firebaseListAdapter); 

は私のルームクラスです:

class Room { 
    private String room; 

    public Room() {} 

    public Room(String room) {this.room = room;} 

    public void setRoom(String room) {this.room = room;} 
    public String getRoom() {return room;} 
} 

私はリストビューを移入しようとすると、項目は正しく表示されますが、ゲッタとセッタを設定していますが、アクティビティを開始するたびにこのエラーが12回表示されます:

W/ClassMapper: No setter/field for -KZcHa8wYpcvLSb7atX- found on class example.com.chat.Room 

どうすればこの問題を解決できますか?前もって感謝します!

+0

は、データベース全体の構造を表示することができます参照しますか? – Wilik

+0

はい。それは非常に単純なものです。私は今それを変更しました。あなたは何か考えていますか? –

+0

私は/ Chat/Room3/-KZcHa8wYpcvLSb7atX/ – Wilik

答えて

1

このデータベース構造を使用すると、FirebaseListAdapterがfirebaseからオブジェクトクラスへの応答を自動的に解析しようとしているため、これらの警告を取り除くことはできません。

  • 変更
  • は、FirebaseListAdapterを使用する代わりにChildEventListenerを使用して、あなたがしたい場合は、ListView

に値を手動で追加しないでください、データベースの構造:

あなたは2つのオプションを持っていますデータベース構造を変更するには、これに変更することができます。

{ 
    "Chat": { 
     "Room1": { 
      ... 
     }, 
     "Room2": { 
      ... 
     }, 
     "Room3": { 
      ... 
     } 
    }, 
    "Chat_Rooms": { 
     "Room1": true, 
     "Room2": true, 
     "Room3": true 
    } 
} 

はその後DatabaseReferenceに「Chat_Rooms」

databaseReference = FirebaseDatabase.getInstance().getReference().child("Chat_Rooms"); 
firebaseListAdapter = new FirebaseListAdapter<Boolean>(this, Boolean.class, android.R.layout.simple_list_item_1, databaseReference) { 
    @Override 
    protected void populateView(View v, Boolean value, int position) { 
     TextView textView = (TextView) v.findViewById(android.R.id.text1); 
     String roomName = this.getRef(position).getKey(); 
     textView.setText(roomName); 
    } 
}; 
+0

これまでは 'ChildEventListener'を使用していましたが、うまくいきましたが、私の場合は' FirebaseListAdapter'を使用していて、データベース構造の変更が答えでした。ありがとう! –

関連する問題