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

Firebase登录点击后加载停滞,伴Binder事务失败问题求助

问题解决:Firebase登录后ProgressDialog持续显示,首页无法跳转

问题分析

从代码和运行日志来看,核心问题集中在以下几点:

  1. 数据库查询监听逻辑错误:使用addValueEventListener会持续监听数据变化,若数据库连接异常导致onDataChange未触发,ProgressDialog会一直停留在界面上。
  2. 错误处理缺失:onCancelled方法未实现,数据库查询失败时没有关闭Dialog或给用户反馈,导致流程卡住。
  3. Google Play服务异常:日志中的DeadObjectException和Binder错误,大概率是设备Google Play服务版本过低或Firebase配置不匹配导致的通信失败。

解决方案

1. 修正数据库查询监听,补充错误处理

将持续监听的addValueEventListener替换为单次查询的addListenerForSingleValueEvent,并完善onCancelled方法的错误处理逻辑:

修改后的SignIn类核心代码:

btnSignIn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final ProgressDialog mDialog = new ProgressDialog(SignIn.this);
        mDialog.setMessage("Please waiting....");
        mDialog.show();

        // 替换为单次查询监听,避免持续监听导致的异常
        table_user.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mDialog.dismiss(); // 无论查询结果如何,先关闭Dialog
                String phone = editPhone.getText().toString().trim();
                if (dataSnapshot.child(phone).exists()) {
                    User user = dataSnapshot.child(phone).getValue(User.class);
                    if (user != null && user.getPassword().equals(editPassword.getText().toString().trim())) {
                        Intent homeIntent = new Intent(SignIn.this, Home.class);
                        Common.currentUser = user;
                        startActivity(homeIntent);
                        finish();
                    } else {
                        Toast.makeText(SignIn.this, "Wrong password!", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(SignIn.this, "User not exists!", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                mDialog.dismiss(); // 查询失败时强制关闭Dialog
                Toast.makeText(SignIn.this, "Database error: " + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
});

2. 排查Google Play服务与Firebase配置

  • 更新设备上的Google Play服务至最新版本,旧版本易引发Binder通信异常。
  • 确认google-services.json文件正确放置在app/目录下,且文件中的包名、项目ID与当前应用完全匹配。
  • 检查Firebase实时数据库安全规则,测试阶段可暂时设置为公开读写(上线后务必修改为权限控制规则):
    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    

3. 额外优化建议

  • 对手机号、密码输入做非空校验,避免空字符串查询数据库。
  • 确保User类的字段与Firebase数据库中的字段完全匹配,避免反序列化失败。

内容的提问来源于stack exchange,提问作者Đoàn Thanh Thảo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:30:59