使用FirebaseUI RecyclerView展示数据时应用崩溃求助
解决AllUsersActivity运行崩溃问题
我帮你排查了代码里的几个致命问题,这应该就是导致页面运行崩溃的核心原因,咱们一步步修复:
1. 最关键的问题:未加载布局文件
你在onCreate方法里把setContentView给注释掉了!没有加载布局的话,所有通过findViewById获取的控件都会返回null,调用setSupportActionBar(mToolBar)或者操作RecyclerView时直接触发NullPointerException,这肯定会崩溃。
2. Toolbar未初始化就调用相关方法
你只声明了mToolBar变量,但没有通过findViewById从布局里获取实例,直接调用setSupportActionBar(mToolBar)也会导致空指针崩溃。
修复后的完整核心代码
修复onCreate方法
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 恢复setContentView,确保传入正确的布局ID(比如R.layout.activity_all_users) setContentView(R.layout.activity_all_users); // 先初始化Toolbar,要和布局里的ID对应 mToolBar = findViewById(R.id.toolbar); setSupportActionBar(mToolBar); getSupportActionBar().setTitle("All Users"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // 初始化RecyclerView allUserList = findViewById(R.id.all_users_list); allUserList.setHasFixedSize(true); allUserList.setLayoutManager(new LinearLayoutManager(this)); // 初始化Firebase数据库引用 allDatabaseUserReference = FirebaseDatabase.getInstance().getReference().child("Users"); allDatabaseUserReference.keepSynced(true); // 按需初始化FirebaseAuth mAuth = FirebaseAuth.getInstance(); }
确保AllUsers实体类符合要求
FirebaseUI需要实体类有无参构造方法,并且字段名和Firebase数据库里的节点名称完全匹配,比如:
public class AllUsers { public String user_name; public String user_status; public String user_image; // FirebaseUI必须的无参构造 public AllUsers() {} public AllUsers(String user_name, String user_status, String user_image) { this.user_name = user_name; this.user_status = user_status; this.user_image = user_image; } // 对应的getter方法(如果用public字段可以省略,但建议规范实现) public String getUser_name() { return user_name; } public String getUser_status() { return user_status; } public String getUser_image() { return user_image; } }
完善onStart里的视图绑定
如果你需要显示用户状态和头像,取消populateViewHolder里的注释:
@Override protected void onStart() { super.onStart(); FirebaseRecyclerAdapter<AllUsers,AllUsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsers, AllUsersViewHolder> ( AllUsers.class, R.layout.all_users_display_layout, AllUsersViewHolder.class, allDatabaseUserReference ) { @Override protected void populateViewHolder(AllUsersViewHolder viewHolder, AllUsers model, int position) { viewHolder.setUser_name(model.getUser_name()); viewHolder.setUser_status(model.getUser_status()); // 取消注释显示状态 viewHolder.setUser_image(getApplicationContext(),model.getUser_image()); // 取消注释显示头像 } }; allUserList.setAdapter(firebaseRecyclerAdapter); }
额外检查项
- 确保
activity_all_users.xml里包含id为toolbar的Toolbar和id为all_users_list的RecyclerView - 确保
all_users_display_layout.xml里包含id为all_users_username、all_user_status、all_users_profile_image的对应控件
引用FirebaseUI官方文档的说明:
如果您要展示数据列表,可能需要将Chat对象绑定到RecyclerView,这意味着要实现自定义RecyclerView.Adapter并与ChildEventListener协调更新。不用担心,FirebaseUI会自动为您完成所有这些操作!
内容的提问来源于stack exchange,提问作者Suryan Boopathy
相关产品推荐
相关产品推荐

