我在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'
}
这是我的数据库结构
此外,我还提供了Android Studio中“工具”->“ Firebase”中的屏幕截图。我最初通过将google-services.json文件放置在project-> app文件夹中来手动连接该应用。
答案 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。