当前位置: 首页 > 知识库问答 >
问题:

Firebase android可以在模拟器上工作,但不能在设备上工作

孔欣荣
2023-03-14

我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。

ref = FirebaseDatabase.getInstance().reference
    ref!!.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError?) {
            Log.d("firebase", "cancelled")

        }

        override fun onDataChange(p0: DataSnapshot?) {

            if (p0!!.exists()){
                Log.d("firebase", "date = $p0")
            } else {
                Log.d("firebase", "no data")
            }

        }

    })

Gradle文件:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'


android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.wonder"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner 
        "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 
    'proguard-rules.pro'
        }
    }
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.google.firebase:firebase-messaging:11.2.2'
implementation 'com.google.firebase:firebase-database:11.2.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso- 
core:3.0.1'

//implementation 'com.google.android.gms:play-services-maps:11.2.2'
implementation 'com.android.support:recyclerview-v7:26.1.0'

implementation 'com.google.firebase:firebase-core:11.2.2'
//    implementation 'com.google.android.gms:play-services-ads:12.0.0'
}
apply plugin: 'com.google.gms.google-services'

我知道这不是数据库规则的问题,因为它们被设置为公共的。

如果你有任何建议,请告诉我。

谢谢

编辑:我有权限添加在清单文件

更新:看起来它的设备工作,我只需要等待30分钟。我离开了设备,过了一会儿回来,数据就在那里。这可能是线程问题吗?我不做任何线程,认为Firebase自己处理它。

共有3个答案

慕志泽
2023-03-14

你的应用可能与该设备不兼容。检查您支持的最小版本和设置,使您的应用程序也与此设备兼容。

(或)

检查回调:

通过调用Firebase数据库引用上的RemveEventListener()方法,可以删除回调。

"如果侦听器已多次添加到数据位置,则每个事件都会多次调用该侦听器,并且必须将其分离相同次数才能完全删除。在父侦听器上调用RemveEventListener()不会自动删除在其子节点上注册的侦听器;还必须在任何子侦听器上调用RemveEventListener()来删除回调。"

(或)

如果类名或文件名中有一些特殊字符,请重命名它,因为某些设备会灰显无效字符。

公孙智
2023-03-14

如果在设备上使用版本构建,则可能会发生这种情况。确保已将版本sha1添加到firebase应用程序控制台中。

单击添加指纹以输入您的版本sha1。

在您的模拟器中,它可能正在工作,因为您已在firebase应用程序密钥中添加了调试sha1和包名。

检查此项以生成发布版本的sha1

郎同化
2023-03-14

确保在应用的清单文件(主清单文件)中,您有:

 类似资料: