Reputation: 19
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
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:
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.
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