I am getting this error when I click on item in listView,I have 2 items in the arraylist,when I press on the first one its logging the number of the object ,however,when I press the second one its crashing and give me this error below:
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
listView on item click:
feedListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
// TODO Auto-generated method stub
MyData item = (MyData) parent.getAdapter().getItem(position);
Log.e("Item in List", String.valueOf(item.getItem(position)));
}
});
Adding objects and adapter to listView:
ParseQuery<ParseObject> query = ParseQuery.getQuery("_User");
query.orderByDescending("createdAt");
query.setLimit(20);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (e == null){
for (ParseObject allData : objects){
userNameString = allData.getString("username");
nameOfBusinessString = allData.getString("BussinessName");
image = (ParseFile) allData.get("Pictures");
if (image == null){
Log.e("Image", "NULL");
}else{
image.getDataInBackground(new GetDataCallback() {
@Override
public void done(byte[] data, ParseException e) {
if (e == null){
byteArray = data;
icon = BitmapFactory.decodeByteArray(
data, 0, data.length);
date = allData.getCreatedAt();
DateFormat df = new SimpleDateFormat("HH:mm:ss\nyyyy-MM-dd");
reportDate = df.format(date);
arrayList.add(new MyData(reportDate,allData.getString("username"),allData.getString("BussinessName")allData.getString("PeopleInBussiness"),data));
}
adapter = new MyAdapter(FeedActivity.this, arrayList);
feedListView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
}
}
}
}
});
Adapter:
class MyAdapter extends BaseAdapter {
private final Context context;
private final ArrayList<MyData> arrayList;
public MyAdapter(Context context, ArrayList<MyData> arrayList) {
this.context = context;
this.arrayList = arrayList;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("getView", String.valueOf(position));
convertView = null;
ViewHolder holder;
if (convertView == null){
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.mylist, parent, false);
holder.Date = convertView.findViewById(R.id.Date);
holder.userName = convertView.findViewById(R.id.userName);
holder.BusinessName = convertView.findViewById(R.id.BusinessName);
holder.imageView = convertView.findViewById(R.id.icon);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.Date.setText(arrayList.get(position).getDate());
holder.userName.setText(arrayList.get(position).getUserName());
holder.BusinessName.setText(arrayList.get(position).getBusinessName());
byte[] byteArray = arrayList.get(position).getPicture();
Bitmap icon = BitmapFactory.decodeByteArray(
byteArray, 0, byteArray.length);
holder.imageView.setImageBitmap(icon);
return convertView;
}
static class ViewHolder {
TextView Date;
TextView userName;
TextView BusinessName;
ImageView imageView;
}
}
MyData Class:
public class MyData {
private final String userName;
private final String businessName;
private final String date;
private final String worthComming;
private final String peopleInBusiness;
private final byte[] picture;
public MyData(String date, String userName, String businessName, byte[] picture) {
this.userName = userName;
this.businessName = businessName;
this.date = date;
this.picture = picture;
}
public int getItem(int position) {
return position;
}
public String getUserName() {
return userName;
}
public String getBusinessName() {
return businessName;
}
public String getDate() {
return date;
}
public byte[] getPicture() {
return picture;
}
}
Thank you !