2016-12-22 36 views
1

我是Firebase的新手。所以,我有一个数据库结构是这样的:如何使用java中的FirebaseListAdapter从Firebase数据库读取儿童?

enter image description here

,并希望显示这些生成的ID的成列表视图。我正在使用FirebaseListAdapter。这里是我的代码:

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

这是我的用户等级:

class User { 
private String userName; 
private String email; 

    void setUserName(String userName) {this.userName = userName;} 
    String getUserName() {return userName;} 

    void setEmail(String email) {this.email = email;} 
    String getEmail() {return email;} 
} 

当我copile此,我得到这个错误:com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String

我怎样才能解决这个问题?

在此先感谢!

+0

你需要显示那个用户对象里面的东西。 – Wilik

+0

我该怎么做?我刚刚添加了用户类。但请记住,我只需要这些id在我的listview中。谢谢! –

回答

1

populateView方法实现更改为

firebaseListAdapter = new FirebaseListAdapter<User>(this, User.class, android.R.layout.simple_list_item_1, databaseReference) { 
    @Override 
    protected void populateView(View v, User user, int position) { 
     TextView textView = (TextView) v.findViewById(android.R.id.text1); 
     String userKey = this.getRef(position).getKey(); 
     textView.setText(userKey); 
    } 
}; 
+0

谢谢,但我不想在我的listview显示用户名。我想要显示User对象中的内容,即这些ID的内容。 –

+0

@ AlexM.I已更新我的答案 – Wilik

+0

我试过这个,但我得到了同样的错误:'com.google.firebase.database.DatabaseException:未能将类型java.util.HashMap的值转换为字符串'你有任何其他理念?谢谢 –

0

你需要的FirebaseListAdapter<Map>代替FirebaseListAdapter<String>。你的代码会变成这样(虽然没有编译,这取决于你;-)

databaseReference = FirebaseDatabase.getInstance().getReference().child("Firebase").child("Users"); 
firebaseListAdapter = new FirebaseListAdapter<Map>(this, Map.class, android.R.layout.simple_list_item_1, databaseReference) { 
    @Override 
    protected void populateView(View v, Map users, int position) { 
     TextView textView = (TextView) v.findViewById(android.R.id.text1); 
     textView.setText(users.getKey()); 
    } 
}; 
listView = (ListView) findViewById(R.id.listView); 
listView.setAdapter(firebaseListAdapter); 
+0

谢谢,但我不想在我的listview显示用户名。我想显示User对象内的内容,这些ID的 –

+0

Aaaaah,好的,相应地更新了答案 – Niels