首页 > 解决方案 > 在此应用程序中添加代码后,该应用程序无法运行

问题描述

错误信息截图

添加此代码后,该应用程序无法正常工作。问题是什么?如果删除此代码,该应用程序将正常运行。

int i, num=0, num2=0;
    for(i=0; i<=23; i++) {
        if(result[i] == 1) {
            num++;
        }
    }
    int[] Time = new int[num-1];
    for(i=0; i<=23; i++) {
        if(result[i] == 1) {
            Time[num2]=i;
            num2++;
        }
    }

    Toast.makeText(getApplicationContext(), Arrays.toString(Time), Toast.LENGTH_LONG).show();

完整的代码是这个

package org.techtown.challenge09;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
ListView listView;
SingerAdapter adapter;
EditText Name;
EditText Start;
EditText End;

Button button;


int[] result = new int[24];

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

    Name = findViewById(R.id.editText1);
    Start = findViewById(R.id.editText2);
    End = findViewById(R.id.editText3);

    adapter = new SingerAdapter();

    button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String name = Name.getText().toString();
            String start = Start.getText().toString() + ":00";
            String end = End.getText().toString() + ":00";

            adapter.addItem(new SingerItem(name, start, end, R.drawable.human));


            int First = Integer.parseInt(Start.getText().toString());
            int Last = Integer.parseInt(End.getText().toString());
            for(int i=First; i<Last; i++) {
                result[i] = 1;
            }
        }

    });

    listView = findViewById(R.id.listView);

    listView.setAdapter(adapter);


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            SingerItem item = (SingerItem) adapter.getItem(position);
            Toast.makeText(getApplicationContext(), "선택 : " + item.getName(),
                    Toast.LENGTH_LONG).show();
        }
    });


    int i, num=0, num2=0;
    for(i=0; i<=23; i++) {
        if(result[i] == 1) {
            num++;
        }
    }
    int[] Time = new int[num-1];
    for(i=0; i<=23; i++) {
        if(result[i] == 1) {
            Time[num2]=i;
            num2++;
        }
    }

    Toast.makeText(getApplicationContext(), Arrays.toString(Time), Toast.LENGTH_LONG).show();
}

public class SingerAdapter extends BaseAdapter {
    ArrayList<SingerItem> items = new ArrayList<SingerItem>();

    @Override
    public int getCount() {
        return items.size();
    }

    public void addItem(SingerItem item) {
        items.add(item);
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        SingerItemView view = new SingerItemView(getApplicationContext());
        SingerItem item = items.get(position);
        view.setName(item.getName());
        view.setStart(item.getStart());
        view.setEnd(item.getEnd());
        view.setImage(item.getResId());

        return view;
    }
}

}

标签: javaandroid

解决方案


由于您尚未发布错误日志,因此我只是在猜测。在这段代码中:

int i, num=0, num2=0;
for(i=0; i<=23; i++) {
    if(result[i] == 1) {
        num++;
    }
}
int[] Time = new int[num-1];

如果内部不存在result[]等于的元素,1则将num保留其初始值0
所以在那之后你初始化Timeint[-1].
这会抛出一个异常,如java.lang.NegativeArraySizeException


推荐阅读