Firebase在一定时间后无法与数据库连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase在一定时间后无法与数据库连接相关的知识,希望对你有一定的参考价值。
我在我的gradle中使用Firebase最新库。
当我关闭应用程序并在几分钟后打开时,我能够获取uid因为用户不为空。
但数据库参考不起作用,我得到一些googleapi gms错误。数据库安全规则对所有人开放。如果我退出并再次登录它工作正常。仅当用户登录并在某个时间之后打开应用程序时才会发生此错误
这是什么解决方案?
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user!= null) {
uid = user.getUid();
DatabaseReference mRefregggg;
mRefregggg = FirebaseDatabase.getInstance().getReference();
mRefregggg.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String abc = dataSnapshot.child("profile/"+uid+"/abc").getValue().toString();
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
};
这是错误的logcat
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@9b65d04
W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@9b65d04
W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
这是我的gradle依赖项
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.google.firebase:firebase-auth:16.0.2'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.android.support:support-vector-drawable:28.0.0-alpha3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:design:28.0.0-alpha3'
implementation 'com.google.android.gms:play-services-analytics:16.0.1'
implementation 'com.google.android.gms:play-services-ads:15.0.1'
}
apply plugin: 'com.google.gms.google-services'
项目级别的gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:4.0.2'
}
这是我的数据库结构
此外,我还包含来自Android Studio的Tools-> Firebase的屏幕截图。我最初将google-services.json文件放在project-> app文件夹中手动连接了应用程序。
答案
您有时无法连接到数据库,因为您有此行
mRefregggg = FirebaseDatabase.getInstance().getReference();
在您的auth侦听器内部,因此,如果有时用户为null,则该数据库实例将无法执行,并且您无法访问数据库。
从侦听器中删除该行并将tit放入onCreate()
方法中,然后在进行该活动时始终初始化数据库引用,而不是等待用户是否为null或初始化。
所以应该这样做:
private DatabaseReference mRefregggg;
onCreate() {
super....
mRefregggg = FirebaseDatabase.getInstance().getReference();
yourAuthListener
}
对于这个问题
module descriptor class for com.google.firebase.auth not found.
如果您使用电子邮件和密码进行匿名登录,请检查Firebase控制台中是否启用了该登录,并检查您正在执行应用的设备是否具有Android Google Play服务> = 9.0.0。
以上是关于Firebase在一定时间后无法与数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
将 Firebase 身份验证与 Firebase 数据库连接