Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Kotlin进行FirebaseAuthentication过程中的对话框进度栏_Android_Kotlin_Dialog_Android Progressbar - Fatal编程技术网

Android 使用Kotlin进行FirebaseAuthentication过程中的对话框进度栏

Android 使用Kotlin进行FirebaseAuthentication过程中的对话框进度栏,android,kotlin,dialog,android-progressbar,Android,Kotlin,Dialog,Android Progressbar,我用Kotlin创建了一个android应用程序。我使用FireBase进行身份验证。在身份验证UI中,我想在FirebaseAuthentication过程中添加一个进度条,即当我单击SignIn按钮时,进度条将出现,直到身份验证成功。我创建了一个包含进度条的约束布局,如下代码所示: <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/an

我用Kotlin创建了一个android应用程序。我使用FireBase进行身份验证。在身份验证UI中,我想在FirebaseAuthentication过程中添加一个进度条,即当我单击SignIn按钮时,进度条将出现,直到身份验证成功。我创建了一个包含进度条的约束布局,如下代码所示:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cp_bg_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
 .....>

            <ProgressBar
                android:id="@+id/cp_pbar"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_gravity="center"
                android:indeterminateTint="@color/honey"
           ...... />

            <TextView
                android:id="@+id/cp_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
            .... />

</androidx.constraintlayout.widget.ConstraintLayout>
我得到以下错误:

E/WindowManager:android.view.WindowManager:Activity com.app.honey.activity.user.authentication.authentication已泄漏 窗口DecorView@5287511最初添加的[身份验证] 在这里 在android.view.ViewRootImpl。(ViewRootImpl.java:511) 在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346) 在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) 在android.app.Dialog.show上(Dialog.java:329) 在com.app.honey.activity.user.authentication.authentication$signIn$1.onComplete上(authentication.kt:96) 访问com.google.android.gms.tasks.zzj.run(未知来源:4) 位于android.os.Handler.handleCallback(Handler.java:873) 位于android.os.Handler.dispatchMessage(Handler.java:99) 位于android.os.Looper.loop(Looper.java:193) 位于android.app.ActivityThread.main(ActivityThread.java:6669) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) D/AndroidRuntime:关闭VM E/AndroidRuntime:致命异常: 主要的 进程:com.app.honey,PID:2507 java.lang.IllegalArgumentException:视图=DecorView@5287511[身份验证]未连接到窗口管理器 在android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:485)中 在android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394) 在android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:124)中 在android.app.Dialog.dismissDialog(Dialog.java:375)上 在android.app.Dialog.disclose(Dialog.java:358)中 在com.app.honey.activity.user.authentication.authentication$signIn$1$1.run(authentication.kt:103) 位于android.os.Handler.handleCallback(Handler.java:873) 位于android.os.Handler.dispatchMessage(Handler.java:99) 位于android.os.Looper.loop(Looper.java:193) 位于android.app.ActivityThread.main(ActivityThread.java:6669) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 我想知道我的代码中存在什么问题,以及如何纠正它


请尝试以下代码:

val dialog = Dialog(this)
val inflate = LayoutInflater.from(this).inflate(R.layout.layout_progress_bar, null)
dialog.setContentView(inflate)
dialog.setCancelable(false)
dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.show()
fireBaseAuthentication = FirebaseAuth.getInstance()
fireBaseAuthentication.signInWithEmailAndPassword(email, password).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        ...
        finish()
    } else {
        dialog.dismiss()
        Toast.makeText(this, "${task.exception?.message}", Toast.LENGTH_LONG).show()
    }
}

您必须在进行身份验证之前显示该对话框,然后将其关闭。此外,您不能在活动之间转换后关闭对话框。

您的代码可以正常工作,但在对话框关闭后,身份验证活动仍将持续,并有时间转到mainactivity@Lina好啊如果结果成功,则不能关闭该对话框。在转换到主活动之后,在身份验证活动中调用finish()方法。当调用finish()方法时,活动完成并仍然等待一段时间打开主活动,这不是问题solution@Lina您是否已将dialog.dismise()调用移动到else语句?仍有问题,活动完成后,仍需等待一段时间才能打开主活动
val dialog = Dialog(this)
val inflate = LayoutInflater.from(this).inflate(R.layout.layout_progress_bar, null)
dialog.setContentView(inflate)
dialog.setCancelable(false)
dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.show()
fireBaseAuthentication = FirebaseAuth.getInstance()
fireBaseAuthentication.signInWithEmailAndPassword(email, password).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        ...
        finish()
    } else {
        dialog.dismiss()
        Toast.makeText(this, "${task.exception?.message}", Toast.LENGTH_LONG).show()
    }
}