在对话框生成器中执行setPositiveButton时出错?

时间:2011-11-23 13:34:38

标签: android android-emulator android-widget

我正在尝试在我的应用中编写一个对话框。问题是,当我单击OK(SetPositiveButton)时,它显示以下运行时错误

E / AndroidRuntime(702):java.lang.ArrayIndexOutOfBoundsException

如果我试图在下面的代码中执行注释行,但它在onClick中工作正常但是为setPositiveButton显示了一些错误

   @Override
protected Dialog onCreateDialog(int id) {
    switch(id){

 case ONCLICK_EXTRAS:
     return new AlertDialog.Builder(AcricklayoutActivity.this)
     .setIcon(R.drawable.ic_launcher)
     .setTitle("Extras")
     .setSingleChoiceItems(R.array.extras, 0, new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {
             String[] items = getResources().getStringArray(R.array.extras);
             value = items[which];
             Log.v("this",String.valueOf(which)+items[which]);
         }
     })
     .setPositiveButton("OK", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {
            // String[] items = getResources().getStringArray(R.array.extras);
            //text.setText(items[which]);
            // Log.v("this",String.valueOf(which)+items[which]);

         }
     })
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {


         }
     })
    .create();

我将在这里解释我的代码

  1. 我正在尝试使用Resource / values文件中的String数组来填充我的AlertDialogbox,
  2. 并将其存储到静态字符串变量
  3. 在该应用程序崩溃后,对话框活动的正面按钮单击,它可以正常工作..任何人都可以帮我解决这个问题???

    先谢谢!!

2 个答案:

答案 0 :(得分:1)

 public void onClick(DialogInterface dialog, int which) { 

此方法中的此which告诉单击的按钮,您不应将其用作数组的索引。 which可以是以下任何一种:

Dialog.BUTTON_NEGATIVE; (value=-2)

Dialog.BUTTON_NEUTRAL;  (value=-3)

Dialog.BUTTON_POSITIVE   (value=-1)

当然,如果您使用它从数组中获取值,它将为您提供ArrayIndexOutOfBoundsException

答案 1 :(得分:0)

这个问题似乎与您的按钮的代码无关,只是简单地在点击时运行的代码。这段代码:

String[] items = getResources().getStringArray(R.array.extras);
value = items[which];
Log.v("this",String.valueOf(which)+items[which]);

似乎问题是你的String数组在位置which没有值。

打印出您的值和整数(名为which)以验证该位置中的值是否不存在。然后根据您想要的结果修改您的代码。