2011-11-23 90 views
1

我想在我的应用程序中编写一个对话框。问题是,当我点击OK(SetPositiveButton)是示以下运行时错误执行对话框构建器中的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 /值文件的字符串数组来填充我的AlertDialogbox,
  2. 并存储到静态字符串变量

它工作正常,直到正按钮点击后,该应用程序崩溃的对话框活动..任何人都可以帮助我在这个问题上?

在此先感谢!

+1

确定的价值'which'在setPositiveButton方法是什么?并且这个值在String []中是否存在? – Sephy

+0

@Sephy:是的,我确定...我使用调试器和Logcat进行了检查... – Pradeepraj

回答

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

+0

我没有得到你的答案..!它返回0到n-1之间的int值,其中数组包含n个元素。 你在说什么?你可以解释.. – Pradeepraj

+0

“哪些”将返回点击对话框上的哪个按钮。其值可能是-1,-2或-3,具体取决于您是否点击了正面,负面或中性按钮。 – rDroid

+0

fine..i将尝试...找到一个另辟蹊径,这 – Pradeepraj

0

这个问题似乎没有与您的按钮的代码,只是简单的代码随着点击运行。此代码:

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

看来问题是,你的String数组,不会在位置which有一个值。

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

+0

我试着按照你的说法,但是当字符串数组本身初始化时,应用程序崩溃了...但是我不知道为什么它没有在setPositiveButton()中单独初始化...?并在onClick()工作正常 – Pradeepraj

+0

所以你说这行是崩溃的应用程序?: String [] items = getResources()。getStringArray(R.array.extras); 因为它似乎是当你试图从数组中获得一个值,因此IndexOutOfBoundsException – NotACleverMan

相关问题