You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中登录进入MainActivity时App崩溃问题求助

问题解决:Firebase反序列化导致App崩溃

崩溃根源

从栈追踪可直接定位核心问题:

com.google.firebase.database.DatabaseException: Class com.vortexv.vconnect.Users does not define a no-argument constructor.

Firebase Realtime Database将数据库数据反序列化为Java对象时,必须要求目标类提供无参构造函数——它需要通过无参构造创建对象实例,再通过setter方法或字段赋值填充数据。你的Users类仅定义了带参构造,缺少无参构造,导致反序列化失败引发崩溃。

修改方案

在Users类中添加无参构造函数,同时保留原有带参构造用于对象创建:

package com.vortexv.vconnect;

public class Users {
    String profilepic,mail,userName,password,userID,lastMessage,status;

    // 添加无参构造函数,必须保留
    public Users() {
        // 空实现即可
    }

    public Users(String id, String namee, String emaill, String password, String imageuri, String status){
        this.userID = id;
        this.userName = namee;
        this.mail = emaill;
        this.password = password;
        this.profilepic = imageuri;
        this.status = status;
    }

    // 以下getter和setter方法保持不变
    public String getProfilepic() {
        return profilepic;
    }

    public void setProfilepic(String profilepic) {
        this.profilepic = profilepic;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getUserName() {
        return userName;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }

    public String getLastMessage() {
        return lastMessage;
    }

    public void setLastMessage(String lastMessage) {
        this.lastMessage = lastMessage;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

额外优化建议

在MainActivity的onDataChange方法中,每次数据更新时先清空usersArrayList,避免重复添加数据:

@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
    usersArrayList.clear(); // 先清空列表,防止重复数据
    for (DataSnapshot dataSnapshot: snapshot.getChildren())
    {
        Users users = dataSnapshot.getValue(Users.class);
        usersArrayList.add(users);
    }
    adapter.notifyDataSetChanged();
}

ValueEventListener会在初始加载和数据变化时多次触发,不清空列表会导致RecyclerView显示重复条目。

内容的提问来源于stack exchange,提问作者Billy Butcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:17:03