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

Android Firebase登录异常求助:网络错误问题排查

解决Firebase登录网络错误问题

根据你提供的错误日志和代码,以下是针对性的排查和修复步骤:

1. 修复Firebase初始化与Repository实例化问题

你的MyApp类中存在两个关键错误,这是导致网络连接失败的核心原因:

  • Firebase初始化判断后未执行初始化代码
  • SalesRepository实例化时未传入FirebaseFirestore实例

修改后的Application.kt代码:

//Application.kt
package com.example.homework3

import android.app.Application
import com.google.firebase.FirebaseApp
import com.google.firebase.firestore.FirebaseFirestore

class MyApp : Application() {
    companion object {
        lateinit var instance: MyApp
        lateinit var salesRepo: SalesRepository
            private set
    }

    override fun onCreate() {
        super.onCreate()
        instance = this

        // 初始化Firebase(如果未初始化)
        if (FirebaseApp.getApps(this).isEmpty()) {
            FirebaseApp.initializeApp(this)
        }

        // 传入FirebaseFirestore实例创建Repository
        salesRepo = SalesRepository(FirebaseFirestore.getInstance())
    }
}

2. 确认网络与环境配置

  • 检查设备网络:确保测试设备(模拟器/真机)有稳定的网络连接,能正常访问外部网络
  • 模拟器代理问题:如果使用Android模拟器,关闭代理设置,或切换到真机测试
  • 防火墙/VPN:暂时关闭VPN或防火墙,避免拦截Firebase的网络请求

3. 验证Firebase项目配置

  • 检查google-services.json:确认该文件已正确放置在app模块的根目录下,且与Firebase控制台下载的文件一致
  • 密钥配置:确认Firebase控制台的项目设置中,已添加当前应用的SHA1和SHA256密钥(debug和release版本都需要)
  • 启用登录方式:在Firebase控制台的「Authentication」-「登录方法」中,确认邮箱/密码登录方式已开启

4. 优化登录代码的异常排查

修改LoginScreenViewModel的异常处理,打印完整堆栈信息,方便定位具体错误:

class LoginScreenViewModel : ViewModel() {
    private val firebaseAuth = FirebaseAuth.getInstance()

    fun loginFirebase(
        email: String,
        password: String,
        successfulLoginHandler: () -> Unit,
        unsuccessfulLoginHandler: () -> Unit
    ) {
        viewModelScope.launch(Dispatchers.IO) {
            try {
                val authResult = firebaseAuth.signInWithEmailAndPassword(email, password).await()
                val userEmail = authResult.user?.email ?: "Unknown email"
                Log.d("LoginSuccess", "Logged in with email: $userEmail")
                withContext(Dispatchers.Main) {
                    successfulLoginHandler()
                }
            } catch (e: Exception) {
                Log.e("LoginException", "Login failed", e) // 打印完整堆栈跟踪
                withContext(Dispatchers.Main) {
                    unsuccessfulLoginHandler()
                }
            }
        }
    }
}

5. 检查AndroidManifest权限

确保AndroidManifest.xml中已添加必要的网络权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:45:13