Firebase在一定时间后无法与数据库连接

问题描述 投票:-1回答:1

我在我的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'
}

这是我的数据库结构

Database structure

此外,我还包含来自Android Studio的Tools-> Firebase的屏幕截图。我最初将google-services.json文件放在project-> app文件夹中手动连接了应用程序。

Firebase Android Studio Connection

android firebase firebase-realtime-database
1个回答
0
投票

您有时无法连接到数据库,因为您有此行

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。

© www.soinside.com 2019 - 2024. All rights reserved.