首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FirebaseAuth ClassCastException

FirebaseAuth ClassCastException
EN

Stack Overflow用户
提问于 2016-08-11 04:42:32
回答 4查看 2.4K关注 0票数 0

我从Android的深度得到了奇怪的异常:

代码语言:javascript
复制
java.lang.RuntimeException: Unable to resume activity {com.example.firebase/com.example.firebase.MainActivity}: java.lang.ClassCastException: com.google.android.gms.b.qf cannot be cast to com.google.firebase.auth.n
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2966)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
    at android.app.ActivityThread.access$700(ActivityThread.java:168)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:177)
    at android.app.ActivityThread.main(ActivityThread.java:5493)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: com.google.android.gms.b.qf cannot be cast to com.google.firebase.auth.n
    at com.google.android.gms.b.aw.a(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.b(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
    at com.google.android.gms.b.av.<init>(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.a(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.b(Unknown Source)
    at com.atlascoder.android.dollaruz.MainActivity.onResume(Unknown Source)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1209)
    at android.app.Activity.performResume(Activity.java:5450)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2922)
...

并且它发生在我的AppCompatActivity的onResume()回调中:

代码语言:javascript
复制
...

FirebaseAuth mAuth;

@Override
protected void onResume(){
    super.onResume();

        if (mAuth == null) {
            mAuth = FirebaseAuth.getInstance();
            mAuth.signInAnonymously().addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    FirebaseUser user = mAuth.getCurrentUser();
                    if (user != null) {
                        setActiveFragment(mActiveFragmentTag);
                    } else {
                        Toast.makeText(MainActivity.this, getString(R.string.toast_cant_auth_firebase), Toast.LENGTH_SHORT).show();
                    }
                }
            });
        } else {
            setActiveFragment(mActiveFragmentTag);
        }
}

...

它不是在第一次调用时发生,而是在一段时间后重新打开应用程序时发生。而且,更奇怪的是,我无法打开应用程序,即使在重启应用程序(我的意思是在设备上重启,而不是重新安装)。

我的模块的build.gradle内容:

代码语言:javascript
复制
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.0'
    defaultConfig {
        applicationId "com.example.firebase"
        minSdkVersion 14
        targetSdkVersion 23
        versionName '1.3'
        vectorDrawables.useSupportLibrary = true
        versionCode 4
    }
    testOptions {
        unitTests.returnDefaultValues = true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.10.19'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.google.android.gms:play-services-ads:9.2.1'
    compile 'me.grantland:autofittextview:0.2.+'
    compile 'com.google.firebase:firebase-auth:9.2.1'
    compile 'com.google.firebase:firebase-messaging:9.2.1'
    compile 'com.google.firebase:firebase-database:9.2.1'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
}

apply plugin: 'com.google.gms.google-services'

会出什么问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-15 20:57:58

登录后,在MainActivityonDestroy中调用FirebaseAuth.getInstance().signOut(),即可试用。

票数 0
EN

Stack Overflow用户

发布于 2016-08-22 11:26:55

您可以在proguard文件中添加以下proguard规则来解决此问题。

代码语言:javascript
复制
-keepattributes Signature

在JDK 5.0和更高版本中编译时,需要"Signature“属性才能访问泛型类型。

com.google.android.gms.b.qf是一种泛型类型。

票数 3
EN

Stack Overflow用户

发布于 2016-08-11 08:41:30

使用您发布的依赖项的代码和版本,我能够创建与您的类似的崩溃堆栈,尽管例外情况是:

代码语言:javascript
复制
java.lang.IncompatibleClassChangeError: com.google.android.gms.internal.zzaez

当我更改依赖项以使用Firebase和Play服务库的9.4.0版本时,这个问题就消失了。看看这对你是否有效。

有许多关于使用旧版本或不一致版本的库或工具导致的异常Firebase问题的报告。如果可能的话,总是使用最新的版本似乎是明智的。

在您的情况下,这些将是:

代码语言:javascript
复制
compileSdkVersion 24
buildToolsVersion "24.0.1"

支持库:24.1.1

Firebase/PlayServices:9.4.0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38883160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档