Android的IndexOutOfBoundsException异常错误的搜索过滤列表视图视图、异常、错误、列表

2023-09-06 10:28:10 作者:人丑嘴不甜长得危险还没钱

我在SherlockAction酒吧实现搜索过滤器,我的搜索​​查看。 我实现了自定义过滤器。当我输入任何字母,我得到一个错误

 公共类PlacesListAdapter扩展ArrayAdapter<地方>器物
        可过滤{

    公共语境mContext;

    名单<地方> mPlaces,原稿;

    公共PlacesListAdapter(上下文的背景下,名单,其中,地方>地方){
        超(背景下,R.layout.list_item_places,地方);
        // TODO自动生成构造函数存根
        this.mPlaces =场所;
        this.mContext =背景;

        原稿=新的ArrayList<地方>(地方);

    }

    @覆盖
    公共场所的getItem(INT位置){
        // TODO自动生成方法存根
        返回mPlaces.get(位置);
    }

    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }

    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){

        ViewHolder持有人;

        如果(convertView == NULL){
            LayoutInflater viewInflater;
            viewInflater = LayoutInflater.from(的getContext());
            convertView = viewInflater.inflate(R.layout.list_item_places,NULL);

            持有人=新ViewHolder();
            holder.placeTitle =(TextView中)convertView
                    .findViewById(R.id.place_title);
            holder.placeDistance =(TextView中)convertView
                    .findViewById(R.id.place_distance);
            holder.placeCategoryIcon =(ImageView的)convertView
                    .findViewById(R.id.place_category_icon);

            convertView.setTag(保持器);

        } 其他 {
            支架=(ViewHolder)convertView.getTag();
        }

        holder.placeTitle.setText(mPlaces.get(位置).getPlaceName());
        holder.placeDistance.setText(mPlaces.get(位置).getPlaceDistance());
        holder.placeCategoryIcon
                .setImageResource(R.drawable.icon_category_hillstation);

        // //设置备用行颜色
        如果(位置%2 == 0){
            convertView
                    .setBackgroundResource(R.drawable.list_view_places_row_1);
        } 其他 {
            convertView
                    .setBackgroundResource(R.drawable.list_view_places_row_2);
        }

        返回convertView;
    }

    静态类ViewHolder {
        TextView的placeId;

        TextView的placeTitle;

        TextView的placeDistance;

        ImageView的placeCategoryIcon;
    }

    @覆盖
    公共过滤用getFilter(){
        // TODO自动生成方法存根
        返回新PlaceFilter();
    }

    私有类PlaceFilter扩展过滤器{

        @覆盖
        保护FilterResults performFiltering(CharSequence的约束){
            FilterResults oReturn =新FilterResults();
            ArrayList的<地方>结果=新的ArrayList<地方>();
            如果(原稿== NULL)
                原稿= mPlaces;
            如果(约束!= NULL){
                如果(原稿=空&安培;!&安培;原稿尺寸()大于0){
                    对于(地点G:原稿){
                        如果(g.getPlaceName()
                                .toLowerCase()
                                .startsWith(constraint.toString()。与toLowerCase()))
                            results.add(G);
                    }
                }
                oReturn.values​​ =结果;
            }
            返回oReturn;
        }

        @覆盖
        保护无效publishResults(CharSequence的约束,
                FilterResults结果){
            mPlaces =(ArrayList的<地方>)results.values​​;
            notifyDataSetChanged();
        }

    }

}
 

错误

  12-26 17:24:43.900:E / AndroidRuntime(18693):致命异常:主要
12-26 17:24:43.900:E / AndroidRuntime(18693):java.lang.IndexOutOfBoundsException:无效索引1,大小为1
12-26 17:24:43.900:E / AndroidRuntime(18693):在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
12-26 17:24:43.900:E / AndroidRuntime(18693):在java.util.ArrayList.get(ArrayList.java:304)
12-26 17:24:43.900:E / AndroidRuntime(18693):在com.m7.nomad.PlacesListAdapter.getView(PlacesListAdapter.java:68)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.AbsListView.obtainView(AbsListView.java:2193)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.ListView.makeAndAddView(ListView.java:1774)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.ListView.fillDown(ListView.java:672)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.ListView.fillSpecific(ListView.java:1330)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.ListView.layoutChildren(ListView.java:1603)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.AbsListView.onLayout(AbsListView.java:2044)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.View.layout(View.java:11418)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.View.layout(View.java:11418)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.FrameLayout.onLayout(FrameLayout.java:431)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.View.layout(View.java:11418)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.View.layout(View.java:11418)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.widget.FrameLayout.onLayout(FrameLayout.java:431)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.View.layout(View.java:11418)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1628)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2585)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.os.Handler.dispatchMessage(Handler.java:99)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.os.Looper.loop(Looper.java:137)
12-26 17:24:43.900:E / AndroidRuntime(18693):在android.app.ActivityThread.main(ActivityThread.java:4507)
12-26 17:24:43.900:E / AndroidRuntime(18693):在java.lang.reflect.Method.invokeNative(本机方法)
12-26 17:24:43.900:E / AndroidRuntime(18693):在java.lang.reflect.Method.invoke(Method.java:511)
12-26 17:24:43.900:E / AndroidRuntime(18693):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:790)
12-26 17:24:43.900:E / AndroidRuntime(18693):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-26 17:24:43.900:E / AndroidRuntime(18693):在dalvik.system.NativeStart.main(本机方法)
 

错误

它指向

  holder.placeTitle.setText(mPlaces.get(位置).getPlaceName());
 
Google 最新 Android 12 系统狂出现BUG 开发者点出 2 关键原因

解决方案

如果您调试,你会看到 mPlaces.getSize()等于1,并试图访问在位置1的项目,你会得到一个 ArrayOutOfBounds 例外。

有什么错在你的ArrayList和它可能不具有的所有数据,你试图让。

I have implemented Search Filter to my SearchView in my SherlockAction Bar. I have Implemented a Custom Filter. When i type any letter i am getting an error

public class PlacesListAdapter extends ArrayAdapter<Place> implements
        Filterable {

    public Context mContext;

    List<Place> mPlaces, orig;

    public PlacesListAdapter(Context context, List<Place> places) {
        super(context, R.layout.list_item_places, places);
        // TODO Auto-generated constructor stub
        this.mPlaces = places;
        this.mContext = context;

        orig = new ArrayList<Place>(places);

    }

    @Override
    public Place getItem(int position) {
        // TODO Auto-generated method stub
        return mPlaces.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater viewInflater;
            viewInflater = LayoutInflater.from(getContext());
            convertView = viewInflater.inflate(R.layout.list_item_places, null);

            holder = new ViewHolder();
            holder.placeTitle = (TextView) convertView
                    .findViewById(R.id.place_title);
            holder.placeDistance = (TextView) convertView
                    .findViewById(R.id.place_distance);
            holder.placeCategoryIcon = (ImageView) convertView
                    .findViewById(R.id.place_category_icon);

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.placeTitle.setText(mPlaces.get(position).getPlaceName());
        holder.placeDistance.setText(mPlaces.get(position).getPlaceDistance());
        holder.placeCategoryIcon
                .setImageResource(R.drawable.icon_category_hillstation);

        // // Setting Alternative Row Colors
        if (position % 2 == 0) {
            convertView
                    .setBackgroundResource(R.drawable.list_view_places_row_1);
        } else {
            convertView
                    .setBackgroundResource(R.drawable.list_view_places_row_2);
        }

        return convertView;
    }

    static class ViewHolder {
        TextView placeId;

        TextView placeTitle;

        TextView placeDistance;

        ImageView placeCategoryIcon;
    }

    @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub
        return new PlaceFilter();
    }

    private class PlaceFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence constraint){
            FilterResults oReturn = new FilterResults();
            ArrayList<Place> results = new ArrayList<Place>();
            if (orig == null)
                orig = mPlaces;
            if (constraint != null) {
                if (orig != null && orig.size() > 0) {
                    for (Place g : orig) {
                        if (g.getPlaceName()
                                .toLowerCase()
                                .startsWith(constraint.toString().toLowerCase()))
                            results.add(g);
                    }
                }
                oReturn.values = results;
            }
            return oReturn;
        }

        @Override
        protected void publishResults(CharSequence constraint,
                FilterResults results) {
            mPlaces = (ArrayList<Place>) results.values;
            notifyDataSetChanged();
        }

    }

}

ERROR

12-26 17:24:43.900: E/AndroidRuntime(18693): FATAL EXCEPTION: main
12-26 17:24:43.900: E/AndroidRuntime(18693): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
12-26 17:24:43.900: E/AndroidRuntime(18693):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at java.util.ArrayList.get(ArrayList.java:304)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at com.m7.nomad.PlacesListAdapter.getView(PlacesListAdapter.java:68)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.AbsListView.obtainView(AbsListView.java:2193)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.ListView.makeAndAddView(ListView.java:1774)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.ListView.fillDown(ListView.java:672)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.ListView.fillSpecific(ListView.java:1330)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.ListView.layoutChildren(ListView.java:1603)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.AbsListView.onLayout(AbsListView.java:2044)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.View.layout(View.java:11418)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.View.layout(View.java:11418)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.View.layout(View.java:11418)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.View.layout(View.java:11418)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.View.layout(View.java:11418)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1628)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2585)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.os.Looper.loop(Looper.java:137)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at android.app.ActivityThread.main(ActivityThread.java:4507)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at java.lang.reflect.Method.invokeNative(Native Method)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at java.lang.reflect.Method.invoke(Method.java:511)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-26 17:24:43.900: E/AndroidRuntime(18693):    at dalvik.system.NativeStart.main(Native Method)

Error

Its pointing to

holder.placeTitle.setText(mPlaces.get(position).getPlaceName());

解决方案

If you debug, you'll see that mPlaces.getSize() equals 1, and trying to access the item in position 1, you'll get an ArrayOutOfBounds exception.

there is something wrong in your ArrayList and it probably doesn't have all the data you are trying to get.