Android的IndexOutOfBoundsException异常错误的搜索过滤列表视图 [英] Android IndexOutOfBoundsException error for Search Filtering List View

查看:222
本文介绍了Android的IndexOutOfBoundsException异常错误的搜索过滤列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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());
 

解决方案

如果您调试,你会看到 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.

这篇关于Android的IndexOutOfBoundsException异常错误的搜索过滤列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆