Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序在点击按钮时停止_Android_Button_If Statement_Logging - Fatal编程技术网

Android应用程序在点击按钮时停止

Android应用程序在点击按钮时停止,android,button,if-statement,logging,Android,Button,If Statement,Logging,我正在制作这个应用程序,当我按下一些按钮时,它就停止了 public class Menu3 extends TheMenu{ Button Buttons[] = new Button[21]; Intent open = new Intent("com.frosti.lidraedi.OPEN"); int clicked; boolean found; int PO1; int GoOn; int s,e; protected v

我正在制作这个应用程序,当我按下一些按钮时,它就停止了

public class Menu3 extends TheMenu{

    Button Buttons[] = new Button[21];
    Intent open = new Intent("com.frosti.lidraedi.OPEN");
    int clicked;
    boolean found;
    int PO1;
    int GoOn;
    int s,e;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    Bundle b = getIntent().getExtras();
    PO1 = b.getInt("PO", 0);

    switch (PO1) {
    case 21:
                    //when i press these buttons everything works well
        setContentView(R.layout.menu21);
        s=0;
        e=11;
        break;
    case 22:
                    //the layout loads without error
                    //but when i press the buttons int the layout it just stops
        setContentView(R.layout.menu22);
        s=12;
        e=15;
        break;
    case 23:
        setContentView(R.layout.menu23);
        s=16;
        e=20;
        break;
    case 24:
        setContentView(R.layout.menu24);
        break;
    case 25:
        setContentView(R.layout.menu25);
        break;

    default:
        break;
    }

    init();
}

private void init() {
    for(int c=s; c <= e; c++){
        Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/SourceSansPro-Semibold.otf");
        int d = c+1;
        int viewId = getResources().getIdentifier("b"+Integer.toString(d), "id", getPackageName());
        if(viewId!=0){
            Buttons[c] =((Button)findViewById(viewId));
            Buttons[c].setTypeface(tf);
            Log.d("Buttons", Integer.toString(c)+" : "+Integer.toString(d));
        }else{
            Log.d("Buttons", "0");
        }
    }
}

public void ButtonOnClick(View v){
    Log.d("ButtonOnClick", "I was clicked");
    found=false;
    int c= 0;
    for(Button b:Buttons){
        Log.d("for loop", "I got run");
        if(b.getId() == v.getId()){
            Log.d("if block", "I got found");
            GoOn=c;
            Log.d("M3:true:C", Integer.toString(c)+ " : "+Integer.toString(v.getId()));
            found=true;
            break;
        }
        Log.d("C var", "I will get incremented");
        c++;  //hehehe
        Log.d("C var", "I got incremented");
    }
    Log.i("ButtonOnClick",Integer.toString(c));
    if(found) {
        Log.i("M3:clicked:GoOn",Integer.toString(GoOn));
        Bundle b1 = new Bundle();

        b1.putInt("GoOn",GoOn);

        open.putExtras(b1);
        Log.d("Activity", "I will get opened");
        startActivity(open);
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
    }else if(clicked != v.getId()){
        clicked = v.getId();
        Toast.makeText(getApplicationContext(),"Skjárinn fannst því miður ekki",Toast.LENGTH_SHORT).show();
    }
}

public类菜单3扩展了菜单{
按钮按钮[]=新按钮[21];
意向开放=新意向(“com.frosti.lidraedi.open”);
点击int;
布尔发现;
INTPO1;
英光;
int s,e;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ActionBar ActionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Bundle b=getIntent().getExtras();
PO1=b.getInt(“PO”,0);
开关(PO1){
案例21:
//当我按下这些按钮时,一切正常
setContentView(R.layout.menu21);
s=0;
e=11;
打破
案例22:
//布局加载时不会出错
//但当我按下布局中的按钮时,它就停止了
setContentView(R.layout.menu22);
s=12;
e=15;
打破
案例23:
setContentView(R.layout.menu23);
s=16;
e=20;
打破
案例24:
setContentView(R.layout.menu24);
打破
案例25:
setContentView(R.layout.menu25);
打破
违约:
打破
}
init();
}
私有void init(){

对于(int c=s;c,创建一个按钮数组,其中包含:

Button Buttons[] = new Button[21];
但在
s
e
之间有一个自定义项(从switch语句中获取值)

由于在数组的所有索引中都没有按钮,所以在
b.getId()
上会得到
NPE
,因为在某些索引上没有任何按钮

所以你可以用两种方法解决你的问题

1-由于您不知道数组的大小,可以使用
ArrayList

2-您需要在
init
中使用

Buttons[] = new Button[e - s];  // or e-s+1 test both
我建议使用
ArrayList
,因此您的代码必须如下所示:

 ArrayList<Button> list = new ArrayList<Button>();
ArrayList list=new ArrayList();
然后,您可以使用以下工具获取代码中的所有id:

for ( int i = 0 ; i < list.size() ; i++)
      list.get(i).getId();
for(int i=0;i
您可以创建一个按钮数组,其中包含:

Button Buttons[] = new Button[21];
但在
s
e
之间有一个自定义项(从switch语句中获取值)

由于在数组的所有索引中都没有按钮,所以在
b.getId()
上会得到
NPE
,因为在某些索引上没有任何按钮

所以你可以用两种方法解决你的问题

1-由于您不知道数组的大小,可以使用
ArrayList

2-您需要在
init
中使用

Buttons[] = new Button[e - s];  // or e-s+1 test both
我建议使用
ArrayList
,因此您的代码必须如下所示:

 ArrayList<Button> list = new ArrayList<Button>();
ArrayList list=new ArrayList();
然后,您可以使用以下工具获取代码中的所有id:

for ( int i = 0 ; i < list.size() ; i++)
      list.get(i).getId();
for(int i=0;i
在初始化按钮后立即尝试运行以下循环,以确保您拥有:

for(Button b : Buttons){
    Log.d("Have button with ID " + b.getId());

然后在onClick()的开头运行相同的循环。这至少可以告诉您按钮的结构是否合理。当您怀疑哪个项目导致NPE时,可以将其单独记录。通常情况下,这是一个不明显的终身错误,尤其是对于片段。

尝试在初始化按钮后立即运行以下循环,以确保您拥有:

for(Button b : Buttons){
    Log.d("Have button with ID " + b.getId());

然后在onClick()的开头运行相同的循环。这至少会告诉您按钮的结构是否正确。当怀疑哪个项目导致了NPE时,可以将它们分开记录。通常情况下,这是一个不明显的终身错误,尤其是对于片段。

第84行是什么?
menu3?如果(b.getId())是
if==v.getId()){
在代码中初始化按钮的地方?
公共类Menu3扩展了菜单{
按钮[]=new Button[21];
第84行是什么?
Menu3
?如果(b.getId()==v.getId()){在代码中初始化
按钮的地方?
公共类菜单3扩展了菜单{
按钮按钮[]=新按钮[21];