AndroidBegginer
AndroidBegginer

Reputation: 19

java.lang.IndexOutOfBoundsException:Invalid index x, size is x

After 3 hours of try i decided to ask here and see if someone can provide me a solution for this error: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

here is my code

public class ParcelAdapter extends BaseAdapter{
        private final Activity context;
        ParcelPOJO.Data items=new ParcelPOJO.Data();
        ParcelAdapter(Activity context, ParcelPOJO.Data items){
            this.context=context;
            this.items=items;

        }

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

        @Override
        public Object getItem(int position) {
            return  0;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }
        class ViewHolder {
            protected TextView eventCode;
            protected TextView eventStatus;
            protected TextView eventPrice;

        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater=context.getLayoutInflater();
            if(convertView==null) {
                convertView = inflater.inflate(R.layout.parcel_row, null);
            }
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.eventCode = (TextView) convertView.findViewById(R.id.pPackage_code);
            viewHolder.eventStatus = (TextView) convertView.findViewById(R.id.pPackedStatus);
            viewHolder.eventPrice =(TextView)convertView.findViewById(R.id.pPrice);
            convertView.setTag(viewHolder);
            ViewHolder holder = (ViewHolder) convertView.getTag();
                holder.eventCode.setText(items.getLive().get(position).getCodeNumber());
                holder.eventStatus.setText(items.getLive().get(position).getStatus());
                holder.eventPrice.setText(items.getLive().get(position).getOrderStorageShowPrice());
                holder.eventCode.setText(items.getProcessing().get(position).getCodeNumber());
                holder.eventStatus.setText(items.getProcessing().get(position).getStatus());
                holder.eventPrice.setText(items.getProcessing().get(position).getOrderStorageShowPrice());
                holder.eventCode.setText(items.getPacked().get(position).getCodeNumber());
                holder.eventStatus.setText(items.getPacked().get(position).getStatus());
                holder.eventPrice.setText(items.getPacked().get(position).getOrderStorageShowPrice());
//line 119                    holder.eventCode.setText(items.getSent().get(position).getCodeNumber());
                    holder.eventStatus.setText(items.getSent().get(position).getStatus());
                    holder.eventPrice.setText(items.getSent().get(position).getOrderStorageShowPrice());
                    holder.eventCode.setText(items.getReceived().get(position).getCodeNumber());
                    holder.eventStatus.setText(items.getReceived().get(position).getStatus());
                    holder.eventPrice.setText(items.getReceived().get(position).getOrderStorageShowPrice());

                return convertView;
            }
        }

logcat

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
        at java.util.ArrayList.get(ArrayList.java:304)
        at dedmd.dedmd.fragmentsparcel.Parcels$ParcelAdapter.getView(Parcels.java:119)
        at android.widget.AbsListView.obtainView(AbsListView.java:2267)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
        at android.widget.ListView.onMeasure(ListView.java:1156)
        at android.view.View.measure(View.java:15172)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
        at android.view.View.measure(View.java:15172)
        at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
        at android.view.View.measure(View.java:15172)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
        at android.view.View.measure(View.java:15172)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:15172)
        at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:762)
        at android.view.View.measure(View.java:15172)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:15172)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
        at android.view.View.measure(View.java:15172)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
        at android.view.View.measure(View.java:15172)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
        at android.view.Choreographer.doCallbacks(Choreographer.java:555)
        at android.view.Choreographer.doFrame(Choreographer.java:525)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
        at android.os.Handler.handleCallback(Handler.java:615)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4745)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)

if i delete this line i get the same error but with Invalid index 1, size is 1

Upvotes: 0

Views: 1003

Answers (1)

Jim
Jim

Reputation: 10288

This method tells the adapter how many items there are:

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

so apparently the array items.getSent() is not as long as the array items.getLive() - so the Adapter tries to go to a position after the end of it and it is invalid.

EDIT:

In other words, your items object has several arrays. One of them is items.getLive() and another one is items.getSent()

If you construct the "items" object and those two arrays have different lengths, then you will have problems. So, you need to fix how the items object is constructed before you construct your Adapter

EDIT 2:

If you do not control the source of your data, then you need either:

  1. You need to look at your object contract (API) or get the source to create one. Having an object with sets of variable length arrays may not be what the provider intends and you have found a bug.

  2. If you don't have an API or it states that you should expect possible null values, then you should be prepared for them. Maybe like this:

    if (items.getSent() != null && items.getSent(),get(poistion)) { holder.eventCode.setText(items.getSent().get(position).getCodeNumber()); ... }

Upvotes: 1

Related Questions