Приложение вылетает при попытке перебрать ArrayList - PullRequest
0 голосов
/ 18 октября 2018

Когда я пытался перебрать массив списков пользовательских списков, используемых для цикла, мое приложение внезапно зависло, и когда я попытался просмотреть logcat, ошибки не возникло.Я пробовал один за другим, находя проблему, затем я обнаружил, что проблема - это та часть, где я пытаюсь получить значение элемента.может помочь мне указать на проблему?

Это часть моего кода при итерации / получении значения массива

 for(int i=0;i<=myAdapter.myItem.size();i++){
                    String name=tabl.getText().toString();
                    //this is the part that causes the crash
                    String answer=myAdapter.myItem.get(i).toString();

                    //mHelper.insertData(name,answer);
                    //temporary disable sql
                }

Это мой подкласс для пользовательского списка

public class MyAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    public ArrayList myItem = new ArrayList();
    public MyAdapter() {
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        for (int i = 1; i < x+1; i++) {
            ListItem listItem = new ListItem();
            listItem.caption = "hahaha";
            myItem.add(i+".");
        }
        notifyDataSetChanged();
    }
    public int getCount() {
        return myItem.size(); }
    public Object getItem(int position) {
        return position; }
    public long getItemId(int position) {
        return position; }
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.items, null);
            holder.caption = (EditText) convertView
                    .findViewById(R.id.ItemCaption);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        //Fill EditText with the value you have in data source
        holder.caption.setText(myItem.get(position).toString());
        holder.caption.setId(position);
        //we need to update adapter once we finish with editing
        holder.caption.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus){
                    final int position = v.getId();
                    final EditText Caption = (EditText) v;
                    myItem.set(position, Caption.getText().toString());
                }
            }
        });
        return convertView;
    }
}
class ViewHolder { EditText caption;}
class ListItem { String caption;}

1 Ответ

0 голосов
/ 18 октября 2018

изменить

for(int i=0;i<=myAdapter.myItem.size();i++){

на:

for(int i=0; i < myAdapter.myItem.size(); i++) {

Когда вы используете <=, на последней итерации вы указываете на ноль.Условие должно быть просто i < myAdapter.myItem.size();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...