Java 创建按钮数组,然后为所有按钮创建一个onClick事件

Java 创建按钮数组,然后为所有按钮创建一个onClick事件,java,android,arrays,button,Java,Android,Arrays,Button,我正在尝试创建按钮数组,然后为所有按钮创建一个onClick事件,这是我的代码,当我运行得到的代码时(应用程序测试(processcom.MyTest.testing)意外停止。请重试)我不确定是什么,错误在哪里。我肯定错过了一些基本的东西,我不是在尝试创建应用程序,我只是在学习Java,特别是Android 这是我的密码 package com.MyTest.testing; import static android.widget.Toast.makeText; import java.

我正在尝试创建按钮数组,然后为所有按钮创建一个onClick事件,这是我的代码,当我运行得到的代码时(应用程序测试(processcom.MyTest.testing)意外停止。请重试)我不确定是什么,错误在哪里。我肯定错过了一些基本的东西,我不是在尝试创建应用程序,我只是在学习Java,特别是Android

这是我的密码

package com.MyTest.testing;


import static android.widget.Toast.makeText;
import java.util.Random;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import android.view.View.OnClickListener;


public class TreActivity extends Activity {
      /** Called when the activity is first created. */
//declaring some public int vars

int isPressed1 = 1;
int isPressed2 = 1;
int isPressed3 = 1;
int isPressed4 = 1;
int isPressed5 = 1;
int isPressed6 = 1;
int isPressed7 = 1;
int isPressed8 = 1;
int isPressed9 = 1;
int isPressed10 = 1;





@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


   myMethod();





}; //End of onCreate (Bundle savedInstanceState) 

public void myMethod() { 
    MyClickHandler handler = new MyClickHandler();  

    Button[] buttons = fnButtonArray();
    for (Button button : buttons) {  
       button.setOnClickListener(handler);  
       }  
 }  


class MyClickHandler implements View.OnClickListener {  
      public void onClick(View v) { 
        Toast.makeText(TreActivity.this, ((Button) v).getText() , Toast.LENGTH_SHORT).show();
      }  
 }


public Button[] fnButtonArray(){

    Button arrButtons[] = new Button[11];
      // started with 1 not 0 for the array to match the button numbers
    arrButtons[1] = (Button) findViewById(R.id.btn1);
    arrButtons[2] = (Button) findViewById(R.id.btn2);
    arrButtons[3] = (Button) findViewById(R.id.btn3);
    arrButtons[4] = (Button) findViewById(R.id.btn4);
    arrButtons[5] = (Button) findViewById(R.id.btn5);
    arrButtons[6] = (Button) findViewById(R.id.btn6);
    arrButtons[7] = (Button) findViewById(R.id.btn7);
    arrButtons[8] = (Button) findViewById(R.id.btn8);
    arrButtons[9] = (Button) findViewById(R.id.btn9);
    arrButtons[10]= (Button) findViewById(R.id.btn10);
    return arrButtons;

  }
  } //public class TreActivity extends Activity

看起来您遇到了NullReferenceException。创建一个大小为26的数组,但只填充第2到第11个元素。然后,您将遍历所有26个元素,试图分配一个单击处理程序。当您尝试将单击处理程序分配给null元素时,将引发异常


通过检查LogCat,您可能可以看到这些详细信息。您可以在Eclipse中访问LogCat或从终端运行
adb LogCat

我认为它不在MediaPlayer.create()中。我把它去掉了,但我还是发现了错误。我还从我上面的问题代码中删除了这一点,以便其他可能阅读我的questino的人不会认为这是问题所在。为了让您知道我的MediaPlayer.create..etc正在工作,我只是尝试通过创建按钮数组和一次onclick来缩短代码,而不是清单10。(当我有10个元素时,一切都按预期进行了)。仍然感谢您的尝试,对于adb logcat,我将对此进行研究,看看如何使用它。为什么您要实例化一个包含26个元素的数组,然后只填充10个元素?此外,数组是基于0的-从0开始,而不是1。我将数字从26更正为11。我从1开始,而不是从零开始,这样它就匹配了按钮的数量。因此0没有任何内容。但是迭代器希望在0处有一个元素。因此,由于第0个元素为null,因此您正在尝试将setOnClickListener设置为null。如果0没有任何内容,则无法使用for(:)语法,因为这将尝试将处理程序分配给不存在的按钮。理想情况下,数组应该从0开始。但是如果您继续从1开始,您需要将此循环更改为
for(i=1;i我将从0开始,并且只创建10。我现在正在尝试此操作。谢谢!