Arreglo de botones en Android

Quiero mapear los botones a una matriz de botones y el código no tiene errores al compilar pero hay fuerza cerca cuando lo ejecuto:

Button buttons[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game_board_view); // Set OnClick listeners Button buttons[] = null; buttons[0] = (Button)findViewById(R.id.buttonOne); buttons[1] = (Button)findViewById(R.id.buttonTwo); buttons[2] = (Button)findViewById(R.id.buttonThree); buttons[3] = (Button)findViewById(R.id.buttonFour); buttons[4] = (Button)findViewById(R.id.buttonFive); buttons[5] = (Button)findViewById(R.id.buttonSix); buttons[6] = (Button)findViewById(R.id.buttonSeven); buttons[7] = (Button)findViewById(R.id.buttonEight); buttons[8] = (Button)findViewById(R.id.buttonMid); } 

LogCat:

 03-26 21:42:51.455: D/dalvikvm(1156): GC_EXTERNAL_ALLOC freed 55K, 53% free 2566K/5379K, external 1625K/2137K, paused 98ms 03-26 21:42:54.323: D/AndroidRuntime(1156): Shutting down VM 03-26 21:42:54.323: W/dalvikvm(1156): threadid=1: thread exiting with uncaught exception (group=0x40015560) 03-26 21:42:54.343: E/AndroidRuntime(1156): FATAL EXCEPTION: main 03-26 21:42:54.343: E/AndroidRuntime(1156): java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.project.superwordwheel/edu.project.superwordwheel.GameView}: java.lang.NullPointerException 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.os.Handler.dispatchMessage(Handler.java:99) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.os.Looper.loop(Looper.java:123) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.ActivityThread.main(ActivityThread.java:3683) 03-26 21:42:54.343: E/AndroidRuntime(1156): at java.lang.reflect.Method.invokeNative(Native Method) 03-26 21:42:54.343: E/AndroidRuntime(1156): at java.lang.reflect.Method.invoke(Method.java:507) 03-26 21:42:54.343: E/AndroidRuntime(1156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 03-26 21:42:54.343: E/AndroidRuntime(1156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 03-26 21:42:54.343: E/AndroidRuntime(1156): at dalvik.system.NativeStart.main(Native Method) 03-26 21:42:54.343: E/AndroidRuntime(1156): Caused by: java.lang.NullPointerException 03-26 21:42:54.343: E/AndroidRuntime(1156): at edu.project.superwordwheel.GameView.onCreate(GameView.java:43) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 03-26 21:42:54.343: E/AndroidRuntime(1156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 03-26 21:42:54.343: E/AndroidRuntime(1156): ... 11 more 

6 Solutions collect form web for “Arreglo de botones en Android”

Tu matriz es nula y estás intentando obtener un índice en ella. Eso es lo que está causando la NullPointerException . La matriz debe inicializarse antes de poder utilizarla para almacenar los botones.

Si desea una matriz de nueve botones, cambie esta línea:

 Button buttons[] = null; 

A esto:

 Button buttons[] = new Button[9]; 

Además, tiene un miembro de la clase Button buttons[] y una variable de función local que también se denomina Button buttons[] . Si esto es intencional entonces por todos los medios seguir adelante. De lo contrario, deseará cambiar aún más su línea:

 buttons[] = new Button[9]; 

Por lo general, es mejor si no tiene que codificar constantes como un 9 en su código. Y por lo general no es necesario.

Por ejemplo, puede poner los identificadores en una matriz y crear una List tamaño dinámico basada en ellos

 private List<Button> buttons; private static final int[] BUTTON_IDS = { R.id.buttonOne, R.id.buttonTwo, R.id.buttonThree, R.id.buttonFour, R.id.buttonFive, R.id.buttonSix, R.id.buttonSeven, R.id.buttonEight, R.id.buttonMid, }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game_board_view); buttons = new ArrayList<Button>(); // or slightly better // buttons = new ArrayList<Button>(BUTTON_IDS.length); for(int id : BUTTON_IDS) { Button button = (Button)findViewById(id); button.setOnClickListener(this); // maybe buttons.add(button); } } 
  Button buttons[] = null; 

Debe crearse el botón, utilizando el new operador:

  Button buttons[] = new Button[9]; 

Pruebe el siguiente código:

 private int objectLength = 9; //Array elements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game_board_view); Button[] buttons = new Button[objectLength]; buttons[0] = (Button)findViewById(R.id.buttonOne); buttons[1] = (Button)findViewById(R.id.buttonTwo); buttons[2] = (Button)findViewById(R.id.buttonThree); buttons[3] = (Button)findViewById(R.id.buttonFour); buttons[4] = (Button)findViewById(R.id.buttonFive); buttons[5] = (Button)findViewById(R.id.buttonSix); buttons[6] = (Button)findViewById(R.id.buttonSeven); buttons[7] = (Button)findViewById(R.id.buttonEight); buttons[8] = (Button)findViewById(R.id.buttonMid); } 

EJEMPLO DE USO:

 Button[] buttons = initializeButtons(3); buttons[1].setText("I am button1"); buttons[2].setText("I am button2"); buttons[3].setText("I am button3"); 

FUNCIÓN:

 public Button[] initializeButtons(int x) { Resources res = getResources(); Button[] buttons = new Button[x]; for (int i = 0; i < x; i++) { String b = "button" + i; buttons[i] = (Button) findViewById(res.getIdentifier(b, "id", getPackageName())); } return buttons;//to prevent array out of bounds exception start from 0 } 

NOTA: Asegúrese de que en su diseño el botón id es button1, button2, button3, .. .. etc '

Tuve una situación como esta, elegí enfoque diferente. Almacé ID en matriz de números enteros.

 Int[] btnarr = new int[3]; btn[0]=R.id.button1; // give your ID Button btn = (Button).findViewById(cc[i]); 
  • ¿El android string.xml soporta cualquier otra forma de xml?
  • ArrayIndexOutOfBoundsException error en el análisis de datos JSON
  • String establecida en ArrayList?
  • Obtener JSONArray sin nombre de matriz?
  • Android / Java rara y aparentemente imposible excepción causando fuerza cerrar
  • La mejor manera de ordenar los datos
  • Convertir lista a matriz en Java
  • Determine si JSON es un JSONObject o JSONArray
  • Android AudioRecord.read devuelve una matriz de 0 elementos
  • ¿Es posible acceder a un elemento de string-array en Android?
  • Obtener la matriz de RadioButtons en un RadioGroup en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.