カスタム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の画像が人物3に設定されています。
このコードをonPostExecuteメソッドに入れると:
if(contactPhoto != null)
{
q.setImageBitmap(contactPhoto);
}
else
{
q.setImageResource(R.drawable.no_image);
}
何もロードできませんでした。この問題を解決するにはどうすればよいですか?