首页 > 解决方案 > 为什么对话框没有关闭而 MainActivity 没有打开?

问题描述

用户单击继续按钮后,应出现一个对话框(“正在更新您的个人资料...”),并且应将用户定向到 MainActivity。但是当我单击继续时,会出现对话框并且不会消失并且用户不会被带到 MainActivity。尽我所能,我能理解的 logcat 中没有错误!我在这段代码中哪里出错了?

binding.continueBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = binding.nameBox.getText().toString();
            String userbio = binding.bioBox.getText().toString();

            if (name.isEmpty())
            {
                binding.nameBox.setError("Please enter your name");
                return;
            }

            dialog.show();

            if(selectedImage != null && FirebaseAuth.getInstance().getCurrentUser() != null)
            {
                StorageReference reference = storage.getReference().child("Profile_Pictures")
                        .child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                reference.putFile(selectedImage).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if (task.isSuccessful()){
                            reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    String imageUrl = uri.toString();

                                    String uid = auth.getUid();

                                    String phone = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber();
                                   
                                    String name = binding.nameBox.getText().toString();

                                    String email = getIntent().getStringExtra("email");
                                    String password = getIntent().getStringExtra("password");
                                    String userbio = binding.bioBox.getText().toString();

                                    User user = new User(uid, name, phone, imageUrl , email , password, userbio);

                                    if (uid != null) {
                                    database.getReference()
                                            .child("Users")
                                            .child(uid)
                                            .setValue(user)
                                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                                @Override
                                                public void onSuccess(Void aVoid) {
                                                    dialog.dismiss();
                                                    Intent intent = new Intent(SetupProfileActivity.this , MainActivity.class);
                                                    startActivity(intent);
                                                    finish();

                                                }
                                            });
                                }}
                            });
                        }
                    }
                });
            } else {
                String uid = FirebaseAuth.getInstance().getUid();
                String phone = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber();

                String email = getIntent().getStringExtra("email");
                String password = getIntent().getStringExtra("password");

                User user = new User(uid, name, phone, "No Image Selected" , email , password, userbio );

                if (uid != null) {
                database.getReference()
                        .child("Users")
                        .child(uid)
                        .setValue(user)
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                dialog.dismiss();
                                Intent intent = new Intent(SetupProfileActivity.this , MainActivity.class);
                                startActivity(intent);
                                finish();

                            }
                        });
            }}
        }
    });

日志猫:

     java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[zip file "/system/app/VivoCalendar/VivoCalendar.apk"],nativeLibraryDirectories=[/system/app/VivoCalendar/lib/arm64, /system/app/VivoCalendar/VivoCalendar.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64, /system/lib64, /system/system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.app.LoadedApk.createAppFactory(LoadedApk.java:275)
        at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:920)
        at android.app.LoadedApk.getClassLoader(LoadedApk.java:973)
        at android.app.LoadedApk.getResources(LoadedApk.java:1205)
        at android.app.ContextImpl.createAppContext(ContextImpl.java:2720)
        at android.app.ContextImpl.createAppContext(ContextImpl.java:2712)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7078)
        at android.app.ActivityThread.access$1500(ActivityThread.java:269)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:257)
        at android.app.ActivityThread.main(ActivityThread.java:8212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
java.util.concurrent.CancellationException: Task was cancelled.
        at com.google.common.w.a.d.s(SourceFile:3)
        at com.google.common.w.a.d.get(SourceFile:4)
        at com.google.common.w.a.dv.a(SourceFile:1)
        at com.google.common.w.a.cb.q(SourceFile:2)
        at com.google.common.w.a.bv.run(SourceFile:4)
        at com.google.android.apps.gsa.shared.util.c.a.aq.run(SourceFile:1)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:257)
        at android.app.ActivityThread.main(ActivityThread.java:8212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
2021-08-05 17:22:41.771 32609-32609/? E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-08-05 17:22:41.943 32609-32609/? E/oid.documentsu: No package ID ff found for ID 0xffffffff.
2021-08-05 17:22:43.086 32272-32272/com.example.chatterapp E/ion: ioctl c0044901 failed with code -1: Invalid argument

    java.io.IOException: com.linkedin.data.lite.DataReaderException: Cache miss for: voyager.android.infra-perform-unbind-in-bind-with-payload
        at com.linkedin.android.lixclient.LixDiskCache.get(LixDiskCache.java:149)
        at com.linkedin.android.lixclient.LixCacheManager.get(LixCacheManager.java:96)
        at com.linkedin.android.lixclient.LixManagerImpl.getTreatmentWithOptionalTracking(LixManagerImpl.java:227)
        at com.linkedin.android.lixclient.LixManagerImpl.getTreatment(LixManagerImpl.java:203)
        at com.linkedin.android.infra.lix.LixDefinitionHelper.getLixTreatment(LixDefinitionHelper.java:157)
        at com.linkedin.android.infra.lix.LixDefinitionHelper.isEnabled(LixDefinitionHelper.java:31)
        at com.linkedin.android.app.LaunchManagerImpl.setupInfraLixes(LaunchManagerImpl.java:620)
        at com.linkedin.android.app.LaunchManagerImpl.onAppProcessStarted(LaunchManagerImpl.java:342)
        at com.linkedin.android.app.FlagshipApplication.onCreate(FlagshipApplication.java:305)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1242)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7218)
        at android.app.ActivityThread.access$1500(ActivityThread.java:269)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:257)
        at android.app.ActivityThread.main(ActivityThread.java:8212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
     Caused by: com.linkedin.data.lite.DataReaderException: Cache miss for: voyager.android.infra-perform-unbind-in-bind-with-payload
        at com.linkedin.android.fission.FissionProtobufDataReader.parseDataTemplate(FissionProtobufDataReader.java:116)
        at com.linkedin.android.fission.FissionProtobufDataReader.parseRecord(FissionProtobufDataReader.java:81)
        at com.linkedin.android.lixclient.LixDiskCache.get(LixDiskCache.java:147)
        at com.linkedin.android.lixclient.LixCacheManager.get(LixCacheManager.java:96) 
        at com.linkedin.android.lixclient.LixManagerImpl.getTreatmentWithOptionalTracking(LixManagerImpl.java:227) 
        at com.linkedin.android.lixclient.LixManagerImpl.getTreatment(LixManagerImpl.java:203) 
        at com.linkedin.android.infra.lix.LixDefinitionHelper.getLixTreatment(LixDefinitionHelper.java:157) 
        at com.linkedin.android.infra.lix.LixDefinitionHelper.isEnabled(LixDefinitionHelper.java:31) 
        at com.linkedin.android.app.LaunchManagerImpl.setupInfraLixes(LaunchManagerImpl.java:620) 
        at com.linkedin.android.app.LaunchManagerImpl.onAppProcessStarted(LaunchManagerImpl.java:342) 
        at com.linkedin.android.app.FlagshipApplication.onCreate(FlagshipApplication.java:305) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1242) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7218) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:269) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:257) 
        at android.app.ActivityThread.main(ActivityThread.java:8212) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015) 

    com.google.android.gms.auth.UserRecoverableAuthException: BadAuthentication
        at lqn.f(PG:16)
        at lqj.a(Unknown Source:12)
        at lqn.h(PG:5)
        at lqn.g(PG:28)
        at qdn.a(PG:13)
        at qdl.h(PG:2)
        at pvs.h(PG:11)
        at pxq.a(PG:3)
        at pxn.e(PG:6)
        at psn.run(Unknown Source:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)

标签: javaandroidfirebasefirebase-authentication

解决方案


关闭addOnCompleteListener范围之外的对话框,试试这个 -

    binding.continueBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //rest of code

            dialog.show();

            if (selectedImage != null && FirebaseAuth.getInstance().getCurrentUser() != null) {
                StorageReference reference = storage.getReference().child("Profile_Pictures")
                        .child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                reference.putFile(selectedImage).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if (task.isSuccessful()) {
                            reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    ///rest of code
                                    if (uid != null) {
                                        database.getReference()
                                                .child("Users")
                                                .child(uid)
                                                .setValue(user)
                                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                                    @Override
                                                    public void onSuccess(Void aVoid) {
                                                        //
                                                    }
                                                });
                                    }
                                }
                            });
                        }
                    }
                });

                //
                dialog.dismiss();
                Intent intent = new Intent(SetupProfileActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            } else {
                //rest of code
                if (uid != null) {
                    database.getReference()
                            .child("Users")
                            .child(uid)
                            .setValue(user)
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    //debug log
                                }
                            });
                    //
                    dialog.dismiss();
                    Intent intent = new Intent(SetupProfileActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }
            }
        }
    });
}

更新 - 数据存储 -

首先检查实时数据库规则是否更改。给写权限。

 {
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {
    ".read": true,
    ".write": true
  }
}

然后另一个可能的原因可能是您的 POJO User 类。用这个

public class User {

public String uid,name,phone,imageUrl,email,password,userbio;


public User(String uid, String name, String phone, String imageUrl, String email, String password, String userbio) {
    this.uid = uid;
    this.name = name;
    this.phone = phone;
    this.imageUrl =imageUrl;
    this.email = email;
    this.password = password;
    this.userbio = userbio;

}
  }

推荐阅读