Button array ID Problem

Jak111

Mitglied
Guten Tag,

Ich habe folgendes Problem. Ich will 9 Buttons erstellen und wolte dafür ein Array erstellen damit ich nicht jeden Button einzeln erstellen muss. Was mache ich falsch?
Fehlermeldung: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

Java:
public class MainActivity extends ActionBarActivity {
  Button[] buttons = initializeButtons(9);
  @Override
  protected void onNewIntent(Intent intent) {

  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  }
  public Button[] initializeButtons(int x) {
  Button[] buttons = new Button[x];
  for (int i = 1; i <= x; i++) {
  String buttonID = "button" + i;
  int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
  buttons[i] = (Button) findViewById(resID);
  } return buttons;
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.menu_main, menu);
  return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  // Handle action bar item clicks here. The action bar will
  // automatically handle clicks on the Home/Up button, so long
  // as you specify a parent activity in AndroidManifest.xml.
  int id = item.getItemId();

  //noinspection SimplifiableIfStatement
  if (id == R.id.action_settings) {
  return true;
  }

  return super.onOptionsItemSelected(item);
  }
}
 
Also ich gehe einmal davon aus, dass Du die Buttons entsprechend definiert hast, so dass Button1, Button2, u.s.w. gefunden werden könnte.

Das generelle Probleme könnte sein, dass die Initialisierung des Arrays an einer Stelle erfolgt, an der noch keine ContentView gesetzt ist und daher keine Buttons gefunden werden können. Ich habe mit der Android Entwicklung kaum etwas am Hut, aber ich würde den Aufruf von initializeButtons in der OnCreate Methode oder so machen. Oder ggf. per lazy load vor dem ersten Aufruf oder so.

Und ganz wichtig: ich würde das Ergebnis von Funktionsaufrufen immer kontrollieren. Die Aufrufe von getRessources().getIdentifier(...) und findViewByID(...) werden nicht auf Ihren Erfolg kontrolliert und das würde mir Bauchschmerzen machen.

Konrad
 
Java:
public class MainActivity extends ActionBarActivity {
  Button[] buttons = initializeButtons(9);
}
Hierdurch werden die Buttons direkt beim initialisieren des Objekts erzeugt und damit sogar noch vor dem Konstruktor. Sämtliche UI Elemente dürfen aber frühestens in der onCreate methode erzeugt/manipuliert werden. Dementsprechend musst du nichts weiter tun, als die initializeButtons methode in eben jener onCreate methode aufzurufen
 

Neue Themen


Zurück
Oben