Исключение ArrayAdapter для Android с индексацией границ

#android

#Android

Вопрос:

Я использую Android ArrayAdapter в своем коде, иногда я вижу, что возникает эта ошибка

 java.lang.ArrayIndexOutOfBoundsException: index=-1 length=12
at java.util.ArrayList.get(ArrayList.java:310)
at com.sample.search.AutoCompleteAdapter.getItem(AutoCompleteAdapter.java:29)
  

Почему индекс вообще должен быть равен -1?

Я заполняю ArrayAdapter с помощью

 @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if(constraint != null) {
                    // A class that queries a web API, parses the data and returns an ArrayList<Symbol>
                    SymbolLookUp symLookUp = SymbolLookUp.getInstance();
                    try {
                        mData = symLookUp.getMatches(getContext(),constraint.toString());
                    }
                    catch(Exception e) {}
                    // Now assign the values and count to the FilterResults object
                    filterResults.values = mData;
                    filterResults.count = mData.size();
                }
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence contraint, FilterResults results) {
                if(results != null amp;amp; results.count > 0) {
                    notifyDataSetChanged();
                }
                else {
                    notifyDataSetInvalidated();
                }
            }
        };
        return myFilter;
    }
  

И мой метод GetItem просто

 @Override
    public String getItem(int index) {      
        return mData.get(index).getSuggestedText();     
    }
  

Комментарии:

1. Проверьте логику вашего кода, потому что я уверен, что иногда это соответствовало бы условию, при котором индекс выходит за пределы диапазона массива.

2. @prasant я получаю эту ошибку, но не могу отследить. не могли бы вы мне помочь?

Ответ №1:

 @Override
    public String getItem(int index) {   
        if(mData != null amp;amp;  mData.get(index) != null) {

        return mData.get(index).getSuggestedText();     
}
    }
  

Редактировать

Вы разместили не весь свой код, поэтому я не могу точно сказать, можете ли вы столкнуться с проблемой в mData.get (index) или нет..

Но если вы столкнулись с проблемой mData.get (index) — это исключение с индексацией за пределами границ, тогда попробуйте приведенный ниже код

 @Override
        public String getItem(int index) {   
            if(mData != null amp;amp;  mData.size() >= index) {

            return mData.get(index).getSuggestedText();     
            }
        }
  

Комментарии:

1. Не приведет ли включение mData.get(index) в предложение if к повторному исключению Arrayindex out of bounds?

2. вы разместили не весь свой код, поэтому я не могу точно сказать, можете ли вы столкнуться с проблемой в mData.get (index) или нет.. но если вы столкнулись с проблемой, вы можете проверить, используя отредактированный выше код

3. @prasrob я думаю, что в вашей переменной «mData» нет элемента

4. Я добавил точное условие проверки, чтобы предотвратить ошибку. Но все же я не знаю, что вызывает это.