繁体   English   中英

java.lang.NoClassDefFoundError:解析失败:Lcom/google/firebase/FirebaseApp$IdTokenListener;

[英]java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/FirebaseApp$IdTokenListener;

我正在尝试将 Firebase 用于简单的 CRUD android 应用程序,但是在实例化 Firebase 数据库引用时,我在运行时遇到以下异常:

java.lang.RuntimeException: Uncaught exception in Firebase Database runloop (3.0.0). Please report to firebase-database-client@google.com
    at com.google.firebase.database.android.AndroidPlatform$1$1.run(com.google.firebase:firebase-database@@16.1.0:98)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    ....
    ....
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/FirebaseApp$IdTokenListener;
    ....
    ....
    at com.satwick.employeecrud.MainActivity.onCreate(MainActivity.java:76)

我浏览了 StackOverflow,虽然在 Firebase 中有很多 NoClassDefFoundError 的案例,但没有一个是关于IdTokenListener 我主要意识到这可能是在设置 Firebase 数据库时遗漏了一些步骤的错误。 所以我重新检查了所有步骤:

  1. 确保我的应用已在 Firebase 项目中注册,并正确签署了 SHA1。
  2. google-services.json 包含在我的应用程序目录中。
  3. firebase 已正确加载到应用程序和项目的 gradle 文件中。 (我现在可以完成电话号码认证,所以我很确定。)

在 onCreate() 方法中:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize Firebase Auth
        mFirebaseAuth = FirebaseAuth.getInstance();
        mFirebaseUser = mFirebaseAuth.getCurrentUser();

        if (mFirebaseUser == null) {
            List<AuthUI.IdpConfig> providers = Arrays.asList(new AuthUI.IdpConfig.PhoneBuilder().build());

            startActivityForResult(
                    AuthUI.getInstance()
                            .createSignInIntentBuilder()
                            .setAvailableProviders(providers)
                            .build(),
                    RC_SIGN_IN);
        } else {
            mUsername = mFirebaseUser.getDisplayName();
        }

        // MainActivity.java:76 The following line causes the exception.
        mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); 
    }

这是 Firebase 的错误吗? 还是我做错了什么? 请帮忙。

另外,我不知道这是否相关,但我有两个应用程序注册到同一个 Firebase 项目,使用相同的签名密钥(Android Studio 的默认 SHA1。)

编辑 1 - 添加 build.gradle 的依赖项 {}:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.1.0-alpha07'

    // Google
    implementation 'com.google.android.gms:play-services-auth:16.0.1'

    // Firebase
    implementation 'com.google.firebase:firebase-core:16.0.9'
    implementation platform('com.google.firebase:firebase-bom:17.0.0')

    implementation 'com.google.firebase:firebase-database'
    implementation 'com.google.firebase:firebase-storage'
    implementation 'com.google.firebase:firebase-auth:17.0.0'
    implementation 'com.firebaseui:firebase-ui-auth:4.3.1'

    // Firebase UI
    implementation 'com.firebaseui:firebase-ui-database:3.3.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

我在build.gradle中使用了一些不需要的库,因此清除了以下 Firebase 导入的混乱:

// Firebase
implementation 'com.google.firebase:firebase-core:16.0.9'
implementation 'com.google.firebase:firebase-auth:17.0.0'

// Firebase UI
implementation 'com.firebaseui:firebase-ui-auth:5.0.0'
implementation 'com.firebaseui:firebase-ui-database:5.0.0'

因此,我尝试从 4.3.1 -> 5.0.0 更新 firebase-ui 的版本,并且成功了。

我尝试将我的版本从

实现 'com.firebaseui:firebase-ui-auth: 4.3.1 '

实现 'com.firebaseui:firebase-ui-auth: 4.3.0 '

实现 'com.google.firebase: firebase -database: 19.2.0 '

实现 'com.google.firebase: firebase -database: 16.0.4 '

它起作用了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM