Java 在builder.create()上崩溃

Java 在builder.create()上崩溃,java,android,Java,Android,我似乎真的搞不懂这个。我试图创建一个简单的警报对话框,但每次执行代码时,它都会在.create()部分崩溃 代码如下: AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Select Unit:") .setItems(units, new DialogInterface.OnClickListener(){

我似乎真的搞不懂这个。我试图创建一个简单的
警报对话框
,但每次执行代码时,它都会在
.create()
部分崩溃

代码如下:

   AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

    builder.setTitle("Select Unit:")
            .setItems(units, new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    unitIndex = i;
                }
            });

    AlertDialog dialog = builder.create();
    dialog.show();
如果这很重要的话,它就在void函数中(因为它应该从onclick事件执行)

谢谢

编辑(LOGCAT):

我对使用logcat有点陌生,这里的信息似乎很少,所以如果有人知道我应该怎么做才能得到完整的错误,请告诉我,很抱歉:我在文档中看到:

setItems方法对第一个参数使用and
itemId
。如我所见,您正在传递
单位
作为第一个参数。检查
units
是否为有效的
itemId

此外,您的构造可能会更改为:

    alertDialogBuilder
        .setMessage("Click yes to exit!")
        .setCancelable(false)
        .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                // if this button is clicked, close
                // current activity
                MainActivity.this.finish();
            }
          })
        .setNegativeButton("No",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                // if this button is clicked, just close
                // the dialog box and do nothing
                dialog.cancel();
            }
        });

请查看此构造中没有
setItems
。。。没有要发送的itemId。

我创建并测试了此方法:

public void createDialog() {

        CharSequence[] example = {"one", "two"};

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.app_name)
                .setItems(example, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // The 'which' argument contains the index position
                        // of the selected item
                        Toast.makeText(getApplicationContext(), "You choose: " + which, Toast.LENGTH_SHORT).show();
                    }
                });
        builder.create().show();

    }

而且效果很好。试着用一下,让我知道。尝试调用此方法,例如在
Fab
onClick
中,如
createDialog()

可能显式设置主题会有所帮助

将其放入
styles.xml中

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />

如果它崩溃,请在logcat上发布堆栈跟踪并设置错误范围。是的,对不起,我对使用android studio有点陌生,所以如果我把日志弄乱了,请让我知道如何更正它…什么类型的变量是“setItems”中的“units”?字符串[],我开始认为这就是问题所在。您应该使用xml字符串数组,对吗?在这种情况下,如何将它从xml文件链接到java?在阅读文档后,我似乎弄乱了数据类型,但在将其切换到xml字符串数组并链接到该数组后,它仍然以相同的方式崩溃…
setItem
也将
CharSequence[]items
作为第一个参数。奇怪的是,模拟器和我的手机都不工作。编辑:好吧,我在一个新项目中试用过,效果很好,所以这变得越来越奇怪…所以问题不是AlertDialog。当你按下调用方法的按钮或启动应用程序时在“onCreate()”中的按钮时,应用程序是否崩溃?如果你可以在MainActivity中发布所有代码,我可以看到错误在哪里解决了,似乎主题是问题所在,将其改回stock,现在它可以工作了。希望这只是一个将被修复的bug…哦,哇,这确实有效。我猜Material.Light.NoActionBar不支持alertdialogs,因此失败了?无论如何谢谢你!那么,SDK应该附带一个默认的。如果没有,您可以按此处描述的方式添加它。
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,  R.style.MyDialogTheme);