FirebaseUI-Android RecyclerView 不响应 POJO
FirebaseUI-Android RecyclerView Not Responding to POJO
我的 Android FirebaseUI Recycler 视图对 String class 数据类型响应良好。但是当我使用我的 POJO class 作为数据类型时没有填充视图。
我已经花时间确保我的 POJO 中的名称与 JSON 文件中的名称匹配。以下是我的代码:
public class MainActivity extends AppCompatActivity {
public static class MessageViewHolder extends RecyclerView.ViewHolder {
TextView messageTextView;
public MessageViewHolder(View view) {
super(view);
messageTextView =(TextView) messageTextView.findViewById(android.R.id.text1);
}
}
android.support.v7.widget.RecyclerView recyclerView;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart()
{
super.onStart();
//Recycler
recyclerView=(android.support.v7.widget.RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//Adapter
FirebaseRecyclerAdapter<User, MessageViewHolder> mFirebaseAdapter=
new FirebaseRecyclerAdapter<User, MessageViewHolder>(User.class,
R.layout.layout,
MessageViewHolder.class,
myRef.child("User")
) {
@Override
protected void populateViewHolder(MessageViewHolder viewHolder, User model, int position) {
viewHolder.messageTextView.setText(model.getName());
}
};
recyclerView.setAdapter(mFirebaseAdapter);
}
}
POJO:
public class User {
public User(){
}
String Name;
String email;
public User(String Name){
this.Name=Name;
}
public void setName(String Name) {
this.Name = Name;
}
public String getName() {
return Name;
}
}
来自 Firebase 的错误
Exception com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.projectgenuis.eneanews.User
编辑(JSON)
{
"User" : {
"Name" : "Zion",
}
FirebaseUI 适配器旨在显示项目列表,在您的例子中是用户列表。在您当前的数据模型中,/User
节点下只有一个用户。这意味着无法在列表视图中显示它。
解决此问题的最简单方法是将您的 JSON 更改为在 Users
节点下有一个用户列表:
{
"Users" : {
"User1": {
"Name" : "Zion"
}
"User2": {
"Name" : "puf"
}
}
}
然后将适配器附加到此集合:
mFirebaseAdapter= new FirebaseRecyclerAdapter<User, MessageViewHolder>(
User.class,
R.layout.layout,
MessageViewHolder.class,
myRef.child("Users")
) {
我的 Android FirebaseUI Recycler 视图对 String class 数据类型响应良好。但是当我使用我的 POJO class 作为数据类型时没有填充视图。
我已经花时间确保我的 POJO 中的名称与 JSON 文件中的名称匹配。以下是我的代码:
public class MainActivity extends AppCompatActivity {
public static class MessageViewHolder extends RecyclerView.ViewHolder {
TextView messageTextView;
public MessageViewHolder(View view) {
super(view);
messageTextView =(TextView) messageTextView.findViewById(android.R.id.text1);
}
}
android.support.v7.widget.RecyclerView recyclerView;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart()
{
super.onStart();
//Recycler
recyclerView=(android.support.v7.widget.RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//Adapter
FirebaseRecyclerAdapter<User, MessageViewHolder> mFirebaseAdapter=
new FirebaseRecyclerAdapter<User, MessageViewHolder>(User.class,
R.layout.layout,
MessageViewHolder.class,
myRef.child("User")
) {
@Override
protected void populateViewHolder(MessageViewHolder viewHolder, User model, int position) {
viewHolder.messageTextView.setText(model.getName());
}
};
recyclerView.setAdapter(mFirebaseAdapter);
}
}
POJO:
public class User {
public User(){
}
String Name;
String email;
public User(String Name){
this.Name=Name;
}
public void setName(String Name) {
this.Name = Name;
}
public String getName() {
return Name;
}
}
来自 Firebase 的错误
Exception com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.projectgenuis.eneanews.User
编辑(JSON)
{
"User" : {
"Name" : "Zion",
}
FirebaseUI 适配器旨在显示项目列表,在您的例子中是用户列表。在您当前的数据模型中,/User
节点下只有一个用户。这意味着无法在列表视图中显示它。
解决此问题的最简单方法是将您的 JSON 更改为在 Users
节点下有一个用户列表:
{
"Users" : {
"User1": {
"Name" : "Zion"
}
"User2": {
"Name" : "puf"
}
}
}
然后将适配器附加到此集合:
mFirebaseAdapter= new FirebaseRecyclerAdapter<User, MessageViewHolder>(
User.class,
R.layout.layout,
MessageViewHolder.class,
myRef.child("Users")
) {