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

Android应用登录注册页点击按钮无法跳转至下一Activity问题求助

问题排查及修复方案

1. 注册逻辑错误及修复

当前注册逻辑存在路径不匹配、用户存在性判断逻辑完全错误的问题:

  • 错误点:你查询的是固定路径Users/Users details的文档,和实际存储用户数据的路径Users/[用户名]完全不一致,永远无法正确判断用户是否已存在
  • 修复代码:
// 注册Activity的onCreate里点击事件修改
sign_Up.setOnClickListener(view -> {
    String name = edit_name.getText().toString().trim();
    String password = edit_password.getText().toString().trim();
    // 空值判断避免空指针
    if(name.isEmpty() || password.isEmpty()){
        Toast.makeText(sign_up.this, "用户名或密码不能为空", Toast.LENGTH_LONG).show();
        return;
    }
    // 直接查询对应用户名的文档
    db.collection("Users").document(name).get()
            .addOnSuccessListener(documentSnapshot -> {
                if(documentSnapshot.exists()){
                    Toast.makeText(sign_up.this, "该用户已存在,请重试", Toast.LENGTH_LONG).show();
                }else{
                    Map<String, Object> users = new HashMap<>();
                    users.put(KEY_NAME,name);
                    users.put(KEY_PASSWORD, password);
                    db.collection("Users").document(name).set(users)
                            .addOnSuccessListener(unused -> {
                                Toast.makeText(sign_up.this,"注册成功",Toast.LENGTH_LONG).show();
                                Intent i = new Intent(sign_up.this,sum_selection.class);
                                startActivity(i);
                            });
                }
            })
            .addOnFailureListener(e -> {
                Toast.makeText(sign_up.this, "发生错误",Toast.LENGTH_LONG).show();
                Log.d(TAG,e.toString());
            });
});

2. 登录逻辑错误及修复

登录逻辑存在3个致命问题:

  • 未初始化user_name、user_password控件,直接调用会触发空指针崩溃
  • 仍查询固定路径Users/users details的文档,无法匹配到实际存储的用户数据
  • Toast中直接拼接控件对象user_name,没有取输入的字符串,会触发类型转换异常
  • 修复代码:
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    // 补上控件初始化,替换为你布局中对应的id
    user_name = findViewById(R.id.edit_login_name);
    user_password = findViewById(R.id.edit_login_password);
    sign_in = findViewById(R.id.btn_sign_in);
    
    sign_in.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            String inputName = user_name.getText().toString().trim();
            String inputPwd = user_password.getText().toString().trim();
            if(inputName.isEmpty() || inputPwd.isEmpty()){
                Toast.makeText(log_in.this, "用户名或密码不能为空", Toast.LENGTH_LONG).show();
                return;
            }
            // 查询对应用户名的文档
            database.collection("Users").document(inputName).get()
                    .addOnSuccessListener(documentSnapshot -> {
                        if(documentSnapshot.exists()){
                            // 匹配密码
                            String correctPwd = documentSnapshot.getString(KEY_PASSWORD);
                            if(inputPwd.equals(correctPwd)){
                                Toast.makeText(log_in.this,"欢迎回来"+ inputName, Toast.LENGTH_LONG).show();
                                Intent in = new Intent(log_in.this, sum_selection.class);
                                startActivity(in);
                            }else{
                                Toast.makeText(log_in.this, "密码错误", Toast.LENGTH_LONG).show();
                            }
                        }
                        else
                        {
                            Toast.makeText(log_in.this, "用户不存在", Toast.LENGTH_LONG).show();
                        }
                    })
                    .addOnFailureListener(e -> {
                        Log.d(TAG, e.toString());
                        Toast.makeText(log_in.this, "登录失败:"+e.getMessage(), Toast.LENGTH_LONG).show();
                    });
        }
    });
}

其他注意事项

  • 所有输入框取内容前要先判空,避免空指针
  • 确认Firestore控制台已经开启了对应路径的读写权限,否则会触发权限拒绝异常

内容的提问来源于stack exchange,提问作者DG fortuin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:54:05