【问题标题】:Why is dialog box not closing and MainActivity not opening?为什么对话框没有关闭而 MainActivity 没有打开?
【发布时间】:2021-08-05 12:27:34
【问题描述】:

用户点击继续按钮后,应该会出现一个对话框(“正在更新您的个人资料...”)并且用户应该被引导到 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();

                            }
                        });
            }}
        }
    });

LOGCAT:

     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)

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    关闭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 用户类。使用这个

    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;
    
    }
      }
    

    【讨论】:

    • 扎希干得好!但是现在对话框根本没有出现。就像我单击 Continue btn 一样,它会立即打开 MainActivity。这不是什么大问题。但是你能帮忙做一件事吗?数据没有保存在数据库中。这段代码有错误吗? @扎希德
    • 其实我认为这一切的发生只是因为更新。我最近更新到最新的北极狐,但后来,android studio 一直在崩溃,所以我再次降级到以前的版本,从那时起,我的代码让我头疼!
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    相关资源
    最近更新 更多