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

注册页面点击创建账号卡顿无跳转,Firebase实时数据库未存数据

注册页面卡顿、数据无法保存到Firebase实时数据库的问题修复

以下是代码中存在的核心问题及对应的修复方案:


1. 手机号获取错误

在CreateAccount()方法中,错误地从密码输入框获取手机号,导致后续数据库验证和存储逻辑完全偏离预期:

// 错误代码
String phone = InputPassword.getText().toString();
// 修正后代码
String phone = InputPhoneNumber.getText().toString();

2. DataSnapshot引用错误

onDataChange()回调中使用了未初始化的全局dataSnapshot变量,而非方法参数传入的snapshot,会触发空指针异常,导致代码执行中断、加载框无法关闭,页面持续卡顿:

// 错误代码
if (!(dataSnapshot.child("Users").child(phone).exists())) {
// 修正后代码
if (!(snapshot.child("Users").child(phone).exists())) {

3. 注册成功后跳转错误

注册成功后跳转到当前注册页面,导致用户重复进入注册流程,应改为跳转到主页面或登录页面:

// 错误代码
Intent intent = new Intent(RegisterActivity.this, RegisterActivity.class);
// 修正后代码
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);

4. onCancelled回调未处理

onCancelled()方法空实现,当数据库请求被取消时,加载框会一直显示,导致页面卡顿。需补充关闭加载框并提示用户的逻辑:

@Override
public void onCancelled(@NonNull DatabaseError error) {
    loadingBar.dismiss();
    Toast.makeText(RegisterActivity.this, "请求被取消:" + error.getMessage(), Toast.LENGTH_SHORT).show();
}

5. 字符串拼接格式错误

手机号已存在的提示字符串缺少空格,显示不规范:

// 错误代码
Toast.makeText(RegisterActivity.this, "This "+ phone +"already exists.", Toast.LENGTH_SHORT).show();
// 修正后代码
Toast.makeText(RegisterActivity.this, "This " + phone + " already exists.", Toast.LENGTH_SHORT).show();

修正后的完整代码

package com.example.ecom;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressDialog;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.HashMap;

public class RegisterActivity extends AppCompatActivity {

    private Button CreateAccountButton;
    private EditText InputName, InputPhoneNumber, InputPassword;
    private ProgressDialog loadingBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        CreateAccountButton = findViewById(R.id.register_btn);
        InputName = findViewById(R.id.register_username_input);
        InputPhoneNumber = findViewById(R.id.register_phone_number_input);
        InputPassword = findViewById(R.id.register_password_input);
        loadingBar = new ProgressDialog(this);

        CreateAccountButton.setOnClickListener(v -> CreateAccount());
    }

    private void CreateAccount() {
        String name = InputName.getText().toString();
        String phone = InputPhoneNumber.getText().toString();
        String password = InputPassword.getText().toString();

        if (TextUtils.isEmpty(name)) {
            Toast.makeText(this, "请输入您的姓名...", Toast.LENGTH_SHORT).show();
        } else if (TextUtils.isEmpty(phone)) {
            Toast.makeText(this, "请输入您的手机号...", Toast.LENGTH_SHORT).show();
        } else if (TextUtils.isEmpty(password)) {
            Toast.makeText(this, "请输入您的密码...", Toast.LENGTH_SHORT).show();
        } else {
            loadingBar.setTitle("创建账号");
            loadingBar.setMessage("请稍候,我们正在验证信息...");
            loadingBar.setCanceledOnTouchOutside(false);
            loadingBar.show();

            ValidatePhoneNumber(name, phone, password);
        }
    }

    private void ValidatePhoneNumber(String name, String phone, String password) {
        DatabaseReference RootRef = FirebaseDatabase.getInstance().getReference();

        RootRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (!(snapshot.child("Users").child(phone).exists())) {
                    HashMap<String, Object> userdataMap = new HashMap<>();
                    userdataMap.put("phone", phone);
                    userdataMap.put("password", password);
                    userdataMap.put("name", name);

                    RootRef.child("Users").child(phone).updateChildren(userdataMap)
                            .addOnCompleteListener(task -> {
                                if (task.isSuccessful()) {
                                    Toast.makeText(RegisterActivity.this, "恭喜您,账号创建成功!", Toast.LENGTH_SHORT).show();
                                    loadingBar.dismiss();

                                    Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                                    startActivity(intent);
                                    finish();
                                } else {
                                    loadingBar.dismiss();
                                    Toast.makeText(RegisterActivity.this, "网络错误:请稍后重试...", Toast.LENGTH_SHORT).show();
                                }
                            });
                } else {
                    Toast.makeText(RegisterActivity.this, "手机号 " + phone + " 已存在。", Toast.LENGTH_SHORT).show();
                    loadingBar.dismiss();
                    Toast.makeText(RegisterActivity.this, "请使用其他手机号重试。", Toast.LENGTH_SHORT).show();

                    Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                loadingBar.dismiss();
                Toast.makeText(RegisterActivity.this, "请求被取消:" + error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:33:22