在 Android 中与 Firebase 连接时出错 找不到 com.google.firebase.auth 的本地模块描述符 class

Error Connecting with Firebase in Android Local module descriptor class for com.google.firebase.auth not found

这里完全是新手,正在创建他的第一个 android 应用程序。我正在尝试在 android 应用程序中使用 firebase 进行身份验证。我在尝试注册新用户时一直收到 Local module descriptor class for com.google.firebase.auth not found. 错误

build.gradle(项目)

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        classpath "com.google.gms:google-services:4.3.3"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(应用程序)

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

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.example.encryptedchat"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    // firebase
    implementation 'com.google.firebase:firebase-auth:19.3.2'
    implementation 'com.google.firebase:firebase-database:19.3.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

AuthActivity.java

public class AuthActivity extends AppCompatActivity {

    private EditText username, email, password, confirm_password;
    private Button register_button;

    FirebaseAuth auth;
    DatabaseReference reference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auth);

        username = findViewById(R.id.username);
        email = findViewById(R.id.email);
        password = findViewById(R.id.password);
        confirm_password = findViewById(R.id.confirmPassword);
        register_button = findViewById(R.id.registerButton);

        register_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String str_username = username.getText().toString();
                String str_email = email.getText().toString();
                String str_password = password.getText().toString();
                String str_confirm_password = confirm_password.getText().toString();
                createAccount(str_username, str_email, str_password);
            }
        });

    }

    private void createAccount(final String uname, String emailaddr, String pswd) {
        System.out.println(uname);
        System.out.println(emailaddr);
        System.out.println(pswd);
        try {
            auth.createUserWithEmailAndPassword(emailaddr, pswd).addOnCompleteListener(new OnCompleteListener<AuthResult>() {

                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    System.out.println(task);
                    if (task.isSuccessful()) {
                        System.out.println("inside task successful");

                        FirebaseUser firebaseUser = auth.getCurrentUser();
                        assert firebaseUser != null;
                        String userId = firebaseUser.getUid();
                        reference = FirebaseDatabase.getInstance().getReference("Users").child(userId);

                        HashMap<String, String> hashMap = new HashMap<>();
                        hashMap.put("id", userId);
                        hashMap.put("username", uname);
                        hashMap.put("imgURL", "default");

                        reference.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    Intent intent = new Intent(AuthActivity.this, MainActivity.class);
                                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                                    startActivity(intent);
                                    finish();
                                }
                            }
                        });
                    } else {
                        Toast.makeText(AuthActivity.this, "Some error occurred...", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

错误日志

2020-08-21 22:09:28.683 22674-22674/com.example.encryptedchat I/e.encryptedcha: [GL_OOM] ClampGrowthLimit 268435456
2020-08-21 22:09:28.702 22674-22712/com.example.encryptedchat W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
2020-08-21 22:09:28.705 22674-22674/com.example.encryptedchat I/FirebaseInitProvider: FirebaseApp initialization successful
2020-08-21 22:09:28.706 22674-22674/com.example.encryptedchat V/Font: Change font:2
2020-08-21 22:09:28.706 22674-22674/com.example.encryptedchat V/Font: Default family:android.graphics.Typeface@a21ca01a
2020-08-21 22:09:28.711 22674-22716/com.example.encryptedchat E/Perf: Fail to get file list com.example.encryptedchat
2020-08-21 22:09:28.711 22674-22716/com.example.encryptedchat E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2020-08-21 22:09:28.711 22674-22716/com.example.encryptedchat E/Perf: Fail to get file list com.example.encryptedchat
2020-08-21 22:09:28.711 22674-22716/com.example.encryptedchat E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2020-08-21 22:09:28.716 22674-22715/com.example.encryptedchat W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
2020-08-21 22:09:28.720 22674-22715/com.example.encryptedchat I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation

我不明白为什么会抛出 NullPointerException。成功读取并传递所有值。

错误日志

I/System.out: john
I/System.out: john@mail.con
    pass123
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(java.lang.String, java.lang.String)' on a null object reference
W/System.err:     at com.example.encryptedchat.AuthActivity.createAccount(AuthActivity.java:71)
        at com.example.encryptedchat.AuthActivity.access0(AuthActivity.java:25)
        at com.example.encryptedchat.AuthActivity.onClick(AuthActivity.java:59)
        at android.view.View.performClick(View.java:7201)
        at android.view.View.performClickInternal(View.java:7170)
        at android.view.View.access00(View.java:806)
        at android.view.View$PerformClick.run(View.java:27562)
        at android.os.Handler.handleCallback(Handler.java:883)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

帮助将不胜感激 谢谢

您忘记初始化 auth 变量。您需要设置

auth = FirebaseAuth.getInstance();

只要 auth 在引用时被初始化,您就可以在任何地方执行此操作。我个人会把它放在 onCreate(...) 方法中。