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
相关产品推荐
相关产品推荐

