2011-11-23 59 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