public View getView(final int position, View convertView, ViewGroup parent) {
SectionHolder sectionHolder = null;
ViewHolder holder = null;
convertView = listAdapter.getView(getIndexForPosition(position),
convertView, parent);
convertView.setTag(contactsIds[getIndexForPosition(position)]);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView
.findViewById(R.id.list_item_title);
holder.id = contactsIds[getIndexForPosition(position)];
new ThumbnailTask(holder,contactsIds[getIndexForPosition(position)]).execute();
return convertView;
}
private class ThumbnailTask extends AsyncTask<Void, Void, Integer> {
private String mId;
private ViewHolder mHolder;
public ThumbnailTask(ViewHolder holder, String id) {
mId = id;
mHolder = holder;
}
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
int drawableId = getContactStatus(mHolder.id);
// Log.i("DRAWABLE",drawableId+"");
return drawableId;
}
protected void onPostExecute(Integer drawableId) {
if (mHolder.id.equals(mId)) {
if (drawableId != 0) {
if (UpdateStatusService.user == 1) {
mHolder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(0, 0,drawableId, 0);
} else {
mHolder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(0, 0,R.drawable.ic_action_quetion, 0);
}
} else {
mHolder.txtTitle.setCompoundDrawablesWithIntrinsicBounds(0,0, android.R.color.transparent, 0);
}
}
}
}
static class ViewHolder {
public TextView txtTitle;
public String id;
}
This is my code of adapter to getView of the listview.
ListView Contains the list of contacts from the android.
but i am getting the java.util.concurrent.RejectedExecutionException Async task basically get the image from the server and if any number matches to the server data that will contain one image to set otherwise not.
So what should i do to avoid this exception?
AsyncTask
threads are placed in a work queue. That work queue restricts how many threads you can instantiate. When you exceed the maximum it will give you a RejectedExecutionException
.
The solution is to refactor your code to not instantiate threads in getView()
or have a check that controls if a thread for the current row already has started. getView()
gets called very frequently and therefore you will eventually exceed the number of allowed threads if you're not checking if a thread is currently running on a row.
DOWNLOAD LINK: https://www.dropbox.com/s/pvr9zyl811tfeem/ListViewImageCache.zip
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With