【问题标题】:FirebaseUI-Android RecyclerView Not Responding to POJOFirebaseUI-Android RecyclerView 不响应 POJO
【发布时间】:2017-05-27 15:19:13
【问题描述】:

我的 Android FirebaseUI Recycler 视图对 String 类数据类型响应良好。但是当我使用我的 POJO 类作为数据类型时没有填充视图。

我已花时间确保我的 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 出错

异常 com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.projectgenuis.eneanews.User 类型

编辑(JSON)

 {
  "User" : {
    "Name" : "Zion",

  }

【问题讨论】:

  • 请分享 yoru 数据库中/User 节点的 JSON(作为文本,没有截图)。您可以通过单击your Firebase Database console 中的导出 JSON 链接轻松获取此信息。
  • JSON:{ "User" : { "Name" : "Zion", }

标签: android json android-recyclerview firebase-realtime-database firebaseui


【解决方案1】:

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")
            ) {

【讨论】:

  • 感谢您的回答,我听从了您的建议,这次应用程序因三个新错误而崩溃:Exception java.lang.RuntimeException: java.lang.reflect.InvocationTargetException Caused by java.lang.reflect.InvocationTargetException: Caused by java.lang.NullPointerException:
  • 由于这些是新的,听起来你正在取得进展,这可能是一个新问题。在发布之前,请务必阅读如何解决NullPointerException:stackoverflow.com/questions/218384/…
  • 为了确保空指针错误不是来自我的 POJO,我将适配器中的类数据类型更改为字符串,但它仍然因相同的错误而崩溃。我按照教程进行操作,但似乎无法弄清楚。我的 POJO 似乎井然有序。 Exception java.lang.RuntimeException: java.lang.reflect.InvocationTargetException Caused by java.lang.reflect.InvocationTargetException: Caused by java.lang.NullPointerException: com.projectgenuis.eneanews.MainActivity$MessageViewHolder.
  • 我对上述代码做了一些调整,并意识到使用 String 数据类型可以很好地与 JSON 中的调整配合使用,例如:{User{"name":Zion,"gender":"male"},} 但 POJO 仍然没有响应。此外,POJO 和 String 类都不会响应您建议的 JSON 结构。您的见解将受到高度重视。
  • 非常感谢。问题实际上来自我的 JSON。我从您的宝贵见解中学到了很多东西。我还不得不重新订购我的 POJO 以反映这些变化,Frank 再次感谢这对我来说意义重大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2012-08-19
  • 2020-01-03
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多