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

使用Kotlin在Firebase中无法创建新用户的问题求助

问题描述

我是Android Studio新手,跟着教程制作注册登录页面,代码完全复刻,但点击注册按钮无反应,Firebase未创建新用户。手动在Firebase官网创建的账号可正常登录,已启用邮箱密码认证且密码长度合规,搜索解决方案未果,附上注册Activity的Kotlin代码及build.gradle代码,恳请帮助。

相关代码

注册Activity Kotlin代码

package com.example.signinlogin

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.signinlogin.databinding.ActivitySignupBinding
import com.google.firebase.auth.FirebaseAuth

class signupactivity : AppCompatActivity() {

    private lateinit var binding: ActivitySignupBinding
    private lateinit var firebaseAuth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignupBinding.inflate(layoutInflater)
        setContentView(binding.root)


        binding.signInOption.setOnClickListener {
            val intent = Intent(this,MainActivity::class.java)
            startActivity(intent)
        }

        val email =  binding.emailId.text.toString()
        val passwordsignup = binding.passwordId.text.toString()
        val renterpassword = binding.retypepasswordId.text.toString()

        binding.submitButton.setOnClickListener {
            if(email.isNotEmpty() && passwordsignup.isNotEmpty() && renterpassword.isNotEmpty()){
                    if(passwordsignup ==  renterpassword){
                        firebaseAuth.createUserWithEmailAndPassword(email,passwordsignup).addOnCompleteListener {
                            if(it.isComplete)
                            {
                                val intent = Intent(this,MainActivity::class.java)
                                startActivity(intent)
                                finish()
                            }
                            else
                            {
                                Toast.makeText( this,it.exception.toString(), Toast.LENGTH_SHORT).show()
                            }

                        }

                }
                else {
                    Toast.makeText( this, "No fields should be left empty",Toast.LENGTH_SHORT).show()
                }
            }

        }

    }
}

build.gradle代码

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-android'
    id 'com.google.gms.google-services'
    id 'com.google.firebase.crashlytics'
    id 'kotlin-kapt'
}

android {
    namespace 'com.example.signinlogin'
    compileSdk 33

    defaultConfig {
        applicationId "com.example.signinlogin"
        minSdk 23
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }



    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    buildFeatures {
        dataBinding = true
        viewBinding = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.10.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'com.google.firebase:firebase-auth-ktx:22.0.0'
    implementation 'com.google.firebase:firebase-crashlytics:18.3.7'
    implementation 'com.google.firebase:firebase-analytics:21.2.2'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
解决方案

你的代码存在几个关键问题,逐一修复即可:

  • FirebaseAuth实例未初始化:声明了lateinit var firebaseAuth: FirebaseAuth但从未赋值,必须在onCreate中添加firebaseAuth = FirebaseAuth.getInstance()来初始化实例。
  • 输入值获取时机错误:在onCreate时就获取输入框文本,此时用户还没输入内容,所有值都是空字符串。必须把输入值的获取逻辑放到按钮点击事件内部,确保获取的是用户点击按钮时的最新输入。
  • 逻辑提示文本错误:密码不匹配时提示“No fields should be left empty”,会误导用户,应改成提示“两次输入的密码不一致”。
  • 完成监听判断错误:it.isComplete仅表示任务已完成,不管成功失败都会返回true,应该用it.isSuccessful判断用户是否创建成功。

修复后的完整代码如下:

package com.example.signinlogin

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.signinlogin.databinding.ActivitySignupBinding
import com.google.firebase.auth.FirebaseAuth

class signupactivity : AppCompatActivity() {

    private lateinit var binding: ActivitySignupBinding
    private lateinit var firebaseAuth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignupBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 初始化FirebaseAuth实例
        firebaseAuth = FirebaseAuth.getInstance()

        binding.signInOption.setOnClickListener {
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }

        binding.submitButton.setOnClickListener {
            // 在点击按钮时才获取输入框内容
            val email = binding.emailId.text.toString().trim()
            val passwordsignup = binding.passwordId.text.toString().trim()
            val renterpassword = binding.retypepasswordId.text.toString().trim()

            if (email.isNotEmpty() && passwordsignup.isNotEmpty() && renterpassword.isNotEmpty()) {
                if (passwordsignup == renterpassword) {
                    firebaseAuth.createUserWithEmailAndPassword(email, passwordsignup)
                        .addOnCompleteListener { task ->
                            if (task.isSuccessful) {
                                // 用户创建成功,跳转登录页
                                val intent = Intent(this, MainActivity::class.java)
                                startActivity(intent)
                                finish()
                            } else {
                                // 显示错误信息
                                Toast.makeText(this, task.exception?.message ?: "注册失败", Toast.LENGTH_SHORT).show()
                            }
                        }
                } else {
                    Toast.makeText(this, "两次输入的密码不一致", Toast.LENGTH_SHORT).show()
                }
            } else {
                Toast.makeText(this, "请填写所有必填字段", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:17:10