2017-10-03 4 views
-2

Je développe une application pour un service d'enquête. L'utilisateur doit entrer son pays pour s'inscrire. J'utilise un alertDialog en utilisant radio buttons.ArrayIndexOutOfBounds dans Radio Button alertDialog

Voici mon code java:

public void onClickCountrySCI(View view) { 

    final String[] CategorySelected = {null}; 
    final String categories[] = {"USA", "Mexico", "Canada"}; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Select Country:"); 
    builder.setSingleChoiceItems(categories, 0, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 

      CategorySelected[0] = categories[i]; 
     } 

    }).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 

      if (CategorySelected[0].equals("USA")) { 

       et4.append(categories[i]); 
      } else if (CategorySelected[1].equals("Mexico")) { 

       et4.append(categories[i]); 
      } else if (CategorySelected[2].equals("Canada")) { 

       et4.append(categories[i]); 
      } 
     } 

    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 

      dialogInterface.dismiss(); 
     } 
    }).create(); 
    builder.show(); 
} 

Je continue à obtenir une erreur. C'est

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 

Comment puis-je me débarrasser de cela? Merci d'avance.

EDIT MISE À JOUR CODE

public void onClickCountrySCI(View view) { 
    final String[] CategorySelected ={""}; 
    final String categories[] = {"USA", "Mexico", "Canada"}; 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Select Country:"); 
    builder.setSingleChoiceItems(categories, -1, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      CategorySelected[0] = categories[i]; 
     } 
    }).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      if (CategorySelected.equals("USA")) { 
       et4.append(categories[i]); 
      } else if (CategorySelected.equals("Mexico")) { 
       et4.append(categories[i]); 
      } else if (CategorySelected.equals("Canada")) { 
       et4.append(categories[i]); 
      } 
     } 
    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      dialogInterface.dismiss(); 
     } 
    }).create(); 
    builder.show(); 
} 

Voici mon code mis à jour.

Voici mon EditText XML:

<EditText 
    android:onClick="onClickCountrySCI" 
    android:focusable="false" 
    android:inputType="text" 
    android:layout_marginTop="10dp" 
    android:layout_marginStart="15dp" 
    android:layout_below="@+id/et_fourteen_sci" 
    android:id="@+id/et_fifteen_sci" 
    android:hint="Country" 
    android:textColor="@color/colorAccent" 
    android:backgroundTint="@color/colorPrimary" 
    android:layout_width="330dp" 
    android:layout_height="45dp" /> 

Ceci est tout mon code mis à jour.

Je n'obtiens plus d'erreurs, mais les valeurs des boutons radio sont placées dans le texte EditText.

+0

Vérifiez combien de données il ya. '[n]' ?? –

+0

Voici le problème avec le tableau CategorySelected []. Vous avez initialisé avec la même taille de catégories []. par exemple. final String [] CategorySelected = {null, null, null}; –

+1

Au lieu d'utiliser array, vous devriez utiliser simplement string. Convertir la catégorie sélectionnée du tableau en chaîne – iamdeowanshi

Répondre

0

essayer de le changer:

builder.setSingleChoiceItems(categories, -1, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 

      CategorySelected[0] = categories[i]; 
     } 
0

Au lieu d'utiliser tableau de chaînes vous pouvez utiliser arrayList becasue vous n'êtes pas specifyng la taille de la liste avant.

Au lieu de final String[] CategorySelected = {null}; ajouter ArrayList<String>mCategorySelected=new ArrayList<>();

final String categories[] = {"USA", "Mexico", "Canada"}; 

DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 

     //Add to arraylist here 

     mCategorySelected.add(i,categories[i]); 
    } 

}).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 

     //check from arraylist here 

     if (mCategorySelected.get(0).equals("USA")) { 

      et4.append(categories[i]); 
     } else if (mCategorySelected.get(1).equals("Mexico")) { 

      et4.append(categories[i]); 
     } else if (mCategorySelected.get(2).equals("Canada")) { 

      et4.append(categories[i]); 
     } 
    } 

EDIT: Aussi, si vous ne voulez pas changer le code et le garder tableau de chaînes vous devez changer ce CategorySelected[0] = categories[i];-CategorySelected[i] = categories[i]; puisque chaque fois que vous ajoutez à index 0. Faites également une initialisation à la matrice comme ceci final String[] CategorySelected = new String[4];