Я думаю, это потому, что ваш массив кнопок создается, когда btn1, ... все еще равны нулю.
Поэтому, когда вы вызываете BUTTONS [i] .setOnClickListener в цикле, вы на самом деле говорите null.setOnClickListener, который выдаст исключение.
Попробуйте настроить массив как переменную и посмотрите ПОСЛЕ ТОГО, КАК вы назначили btn1 и т. Д.
Не проверял, но что-то вроде этого может работать лучше ...
private ArrayList mBtns = new ArrayList ();
private void initButton (int id) {
button = (Button) findViewById (id);
button.setOnClickListener (это);
mBtns.add (кнопка);
}
...
initButton (R.id.btn_1);
initButton (R.id.btn_2);
initButton (R.id.btn_3);
initButton (R.id.btn_4);
Кроме того, если кнопки не выполняют очень похожих действий, вам может быть лучше просто определить атрибут onClick для каждого в макете и сэкономить МНОГО кода (доступно только в Android 1.6 и выше).