1

カスタム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);
            }

何もロードできませんでした。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

ハイこれがあなたのお役に立てば幸いです

    class LoadImage extends AsyncTask<String, Void, List<Bitmap>> 
{

    protected List<Bitmap> doInBackground(String... ac) 
    {
        List<Bitmap> totalBitmap = new ArrayList<Bitmap>();
        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);
                totalBitmap.add(contactPhoto);
            }
            cursor.close();

        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return totalBitmap;
    }

    @Override
    protected void onPreExecute()
    {

    }

    @Override
    protected void onPostExecute(List<Bitmap> contactPhoto) 
    {
        for (Bitmap bitmap : contactPhoto) {

            if(contactPhoto != null)
            {
                q.setImageBitmap(bitmap);
            }
            else
            {
               q.setImageResource(R.drawable.no_image);
            }

        }


    }
 }
于 2013-07-25T15:23:36.077 に答える