Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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
Java 警报对话框崩溃Android测试-“;Can';t在未调用Looper.prepare()的线程内创建处理程序;_Java_Android_Android Espresso - Fatal编程技术网

Java 警报对话框崩溃Android测试-“;Can';t在未调用Looper.prepare()的线程内创建处理程序;

Java 警报对话框崩溃Android测试-“;Can';t在未调用Looper.prepare()的线程内创建处理程序;,java,android,android-espresso,Java,Android,Android Espresso,当我正常运行该应用程序时,它运行良好并显示警报对话框,但当我在插入指令的测试中运行它时,它在builder中崩溃。在第一行创建: AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage(message) .setCancelable(false) .setPositiveButton("Yes", ne

当我正常运行该应用程序时,它运行良好并显示警报对话框,但当我在插入指令的测试中运行它时,它在
builder中崩溃。在第一行创建

    AlertDialog.Builder builder = new AlertDialog.Builder(activity);
    builder.setMessage(message)
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    login(activity);
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                    activity.finish();
                }
            });
    AlertDialog alert = builder.create(); // Crash
    alert.show();
除此之外:

        final AlertDialog dialog = new AlertDialog(P.mContext, mTheme);
这将关闭应用程序,然后测试失败,因为没有任何活动:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
这是一个线程问题,但根据答案,这不是我所期望的:

要验证对话框是否出现,只需检查对话框中是否显示文本视图:

onView(withText(“dialogText”))。检查(匹配项(isDisplayed())

我不明白如果在创建对话框之前应用程序崩溃,我应该如何检查文本是否显示

编辑:


一些可能对你有帮助的事情

  • 调用
    mActivityRule.getActivity().showOptionDialog()
    在浓缩咖啡测试中不是“浓缩咖啡”方式。除非对测试进行了正确的注释,否则它不会在UI线程上运行,因此在这种情况下,您将从检测线程调用应该在UI线程上执行的操作。您可以通过执行以下操作来解决此问题:

    rule.runOnUiThread(新的Runnable(){ @凌驾 公开募捐{ mActivityRule.getActivity().showOptionDialog(); } });

  • 这样做可能需要您构建自己的同步逻辑,以确保在发生这种情况之前不会运行将来的Espresso语句

    使用Espresso测试这一点的更好方法是使用
    onView(XXX)。在通常会调用
    showOptions对话框()
    的UI控件上执行(单击())

  • 此外,您不需要自己解析传递给
    withText()
    的字符串,您只需使用字符串资源id,但这不是您看到的问题的原因

  • 一些可能对你有帮助的事情

  • 调用
    mActivityRule.getActivity().showOptionDialog()
    在浓缩咖啡测试中不是“浓缩咖啡”方式。除非对测试进行了正确的注释,否则它不会在UI线程上运行,因此在这种情况下,您将从检测线程调用应该在UI线程上执行的操作。您可以通过执行以下操作来解决此问题:

    rule.runOnUiThread(新的Runnable(){ @凌驾 公开募捐{ mActivityRule.getActivity().showOptionDialog(); } });

  • 这样做可能需要您构建自己的同步逻辑,以确保在发生这种情况之前不会运行将来的Espresso语句

    使用Espresso测试这一点的更好方法是使用
    onView(XXX)。在通常会调用
    showOptions对话框()
    的UI控件上执行(单击())

  • 此外,您不需要自己解析传递给
    withText()
    的字符串,您只需使用字符串资源id,但这不是您看到的问题的原因

  • 您是否调用显示测试对话框的方法?请发布您的测试code@Be_Negative对它在我从测试中调用的活动中的一个方法中。@jdonmoyer我编辑了我的问题并添加了它。您是否调用显示测试对话框的方法?请发布您的测试code@Be_Negative对它在我从测试中调用的活动中的一个方法中。@jdonmoyer我编辑了我的问题并添加了它的答案,但是单击按钮不会触发ShowOptions对话框()。它是在某个HTTP响应后触发的。@发问者,然后您需要使用Espresso为在UIThread上运行该方法提供的各种机制之一。@jdonmoyer我有一个类似的问题,请您帮忙,谢谢,但是单击按钮不会触发ShowOptions Dialog()。它是在某个HTTP响应后触发的。@提问者,那么您需要使用Espresso为在UIThread上运行该方法提供的各种机制中的一种。@jdonmoyer我有一个类似的问题,您能帮我解决吗
    android.support.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
    
        mActivityRule.launchActivity(intent);
    
        mActivityRule.getActivity().showOptionDialog();
    
        onView(withText(mActivityRule.getActivity().getString(R.string.dialogText))).check(matches(isDisplayed()));