我正在尝试在我的应用程序中编写一个对话框。问题是当我单击“确定”(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();


我将在这里解释我的代码


我正在尝试使用Resource / values文件中的String数组填充我的AlertDialogbox,
并将其存储到静态字符串变量值中


在该应用程序崩溃后,直到对话框活动的正面按钮单击为止,它都可以正常工作。任何人都可以帮助我解决这个问题吗???

提前致谢 !!

最佳答案

 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

10-08 16:30