我想在自定义 ArrayAdapter 中使用 AsyncTask 将用户联系人中的图像加载到 ImageView
这是我的图像加载代码片段:
class LoadImage extends AsyncTask<String, Void, Bitmap>
{
protected Bitmap doInBackground(String... ac)
{
Bitmap contactPhoto = null;
try
{
ContentResolver cr = context.getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
"DISPLAY_NAME = '" + ac[0] + "'", null, null);
if (cursor.moveToFirst())
{
String contactId =
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//
// Get the contact photo.
//
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
Long.parseLong(contactId));
InputStream input =
ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
contactPhoto = BitmapFactory.decodeStream(input);
}
cursor.close();
if(contactPhoto != null)
{
q.setImageBitmap(contactPhoto);
}
else
{
q.setImageResource(R.drawable.no_image);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return contactPhoto;
}
@Override
protected void onPreExecute()
{
}
@Override
protected void onPostExecute(Bitmap contactPhoto)
{
}
}
在此代码中,图像加载到错误的位置,例如,第 1 个人的 imgae 为第 3 个人设置了!
如果我将此代码放在 onPostExecute 方法中:
if(contactPhoto != null)
{
q.setImageBitmap(contactPhoto);
}
else
{
q.setImageResource(R.drawable.no_image);
}
什么都无法加载。我该如何解决这个问题?