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

时间:2018-08-03 11:12:21

标签: android firebase firebase-realtime-database

我在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) {

                    }
                });
              };

这是错误的日志

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中“工具”->“ Firebase”中的屏幕截图。我最初通过将google-services.json文件放置在project-> app文件夹中来手动连接该应用。

Firebase Android Studio Connection

1 个答案:

答案 0 :(得分:0)

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

let videoScaleFactor = Float(0.8) 
let value = (mode == .Faster) ? Float(videoAsset.duration.value) / videoScaleFactor : Float(videoAsset.duration.value) * videoScaleFactor 
let scaledVideoDuration = CMTimeMake(Int64(value), videoAsset.duration.timescale)

在您的auth侦听器内部,因此,如果有时用户为null,则该数据库实例将不会执行,并且您将无法访问数据库。

从您的侦听器中删除该行,并将tit放入您的mRefregggg = FirebaseDatabase.getInstance().getReference(); 方法中,然后您将始终在进行该活动时初始化数据库引用,而不用等待查看用户是否为null或不初始化。

所以应该这样:

onCreate()

此问题

private DatabaseReference mRefregggg;

onCreate() {
super....
mRefregggg = FirebaseDatabase.getInstance().getReference();

yourAuthListener
}

如果您使用带有电子邮件和密码的匿名登录,请检查Firebase控制台中是否启用了该功能,并检查您正在执行应用程序的设备是否具有Android Google Play服务> = 9.0.0。