简体   繁体   English

使用通用图像加载器加载联系人的PHOTO_URI

[英]Use Universal Image Loader to load PHOTO_URI of contact

Righ now i'm getting some problems following: 现在,我遇到了以下问题:

05-14 16:20:59.355: D/ImageLoader(31397): Start display image task [content://com.android.contacts/contacts/281/photo_120x120] 05-14 16:20:59.360: D/ImageLoader(31397): Load image from network [content://com.android.contacts/contacts/281/photo_120x120] 05-14 16:20:59.360: D/ImageLoader(31397): Cache image on disk [content://com.android.contacts/contacts/281/photo_120x120] 05-14 16:20:59.355:D / ImageLoader(31397):开始显示图像任务[content://com.android.contacts/contacts/281/photo_120x120] 05-14 16:20:59.360:D / ImageLoader( 31397):从网络中加载图片[content://com.android.contacts/contacts/281/photo_120x120] 05-14 16:20:59.360:D / ImageLoader(31397):在磁盘上缓存图片[content:// com .android.contacts / contacts / 281 / photo_120x120]

05-14 16:20:59.445: E/ImageLoader(31397): URI: content://com.android.contacts/contacts/281/photo/photo 05-14 16:20:59.445: E/ImageLoader(31397): java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/281/photo/photo 05-14 16:20:59.445: E/ImageLoader(31397): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167) 05-14 16:20:59.445: E/ImageLoader(31397): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 05-14 16:20:59.445: E/ImageLoader(31397): at android.content.ContentProviderProxy.query(ContentProviderNative.java:385) 05-14 16:20:59.445: E/ImageLoader(31397): at android.content.ContentResolver.query(ContentResolver.java:417) 05-14 16:20:59.445: E/ImageLoader(31397): at android.content.ContentResolver.query(ContentResolver.java:360) 05-14 16:20:59.445: E/ImageLoader(31397): at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:1982) 05-14 16:20:59.445: E/ImageL 05-14 16:20:59.445:E / ImageLoader(31397):URI:content://com.android.contacts/contacts/281/photo/photo 05-14 16:20:59.445:E / ImageLoader(31397) :java.lang.IllegalArgumentException:URI:content://com.android.contacts/contacts/281/photo/photo 05-14 16:20:59.445:E / ImageLoader(31397):位于android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:167)05-14 16:20:59.445:E / ImageLoader(31397):在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)05-14 16:20:59.445:E / ImageLoader (31397):位于android.content.ContentProviderProxy.query(ContentProviderNative.java:385)05-14 16:20:59.445:E / ImageLoader(31397):位于android.content.ContentResolver.query(ContentResolver.java:417) 05-14 16:20:59.445:E / ImageLoader(31397):在android.content.ContentResolver.query(ContentResolver.java:360)05-14 16:20:59.445:E / ImageLoader(31397):在android。 provider.ContactsContract $ Contacts.openContactPhotoInputStream(ContactsContract.java:1982)05-14 16:20:59.445:E / ImageL oader(31397): at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:2013) 05-14 16:20:59.445: E/ImageLoader(31397): at com.view.widget.ContactDownloader.getStreamFromContent(ContactDownloader.java:26) 05-14 16:20:59.445: E/ImageLoader(31397): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88) 05-14 16:20:59.445: E/ImageLoader(31397): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:290) 05-14 16:20:59.445: E/ImageLoader(31397): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:273) 05-14 16:20:59.445: E/ImageLoader(31397): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:229) 05-14 16:20:59.445: E/ImageLoader(31397): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImage oader(31397):位于android.provider.ContactsContract $ Contacts.openContactPhotoInputStream(ContactsContract.java:2013)05-14 16:20:59.445:E / ImageLoader(31397):位于com.view.widget.ContactDownloader.getStreamFromContent(ContactDownloader .java:26)05-14 16:20:59.445:E / ImageLoader(31397):位于com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88)05-14 16:20:59.445 :E / ImageLoader(31397):位于com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:290)05-14 16:20:59.445:E / ImageLoader(31397):位于com.nostra13.universalimageloader。 core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:273)05-14 16:20:59.445:E / ImageLoader(31397):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:229)05-14 16:20:59.445:E / ImageLoader(31397):在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImage Task.java:135) 05-14 16:20:59.445: E/ImageLoader(31397): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 05-14 16:20:59.445: E/ImageLoader(31397): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 05-14 16:20:59.445: E/ImageLoader(31397): at java.lang.Thread.run(Thread.java:841) Task.java:135)05-14 16:20:59.445:E / ImageLoader(31397):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)05-14 16:20:59.445:E / ImageLoader(31397):在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573)05-14 16:20:59.445:E / ImageLoader(31397):在java.lang.Thread.run(Thread .java:841)

I try to extend BaseImageDownloader and override getStreamFromContent(...) method in issue 564: https://github.com/nostra13/Android-Universal-Image-Loader/issues/564 same: 我尝试扩展BaseImageDownloader并覆盖问题564中的getStreamFromContent(...)方法: https : //github.com/nostra13/Android-Universal-Image-Loader/issues/564相同:

@Override
protected InputStream getStreamFromContent(String imageUri, Object extra) throws FileNotFoundException {
        ContentResolver res = context.getContentResolver();
        Uri uri = Uri.parse(imageUri);
        if (imageUri.startsWith("content://com.android.contacts/")) {
            return ContactsContract.Contacts.openContactPhotoInputStream(res, uri);
        } else {
            return res.openInputStream(uri);
        }
    }

but not success. 但没有成功。

Please help me. 请帮我。

Thanks & regards 感谢和问候

I think you're running into the issue described (and solved) here: Load Contact Image Into Bitmap . 我认为您遇到了此处描述(并解决)的问题:将Contact Image加载到Bitmap中 For reference, the solution is to pass the URI of the contact itself to openContactPhotoInputStream(), not the URI of the contact's photo. 作为参考,解决方案是将联系人本身的URI传递给openContactPhotoInputStream(),而不是联系人照片的URI。

Use below code its working fine for me. 使用下面的代码对我来说很好用。 I hope it will also work for you as well... 我希望它也能为您服务...

public class BaseImageLoaderClass extends BaseImageDownloader {

public BaseImageLoaderClass(Context context) {
    super(context);

}

@Override
protected InputStream getStreamFromContent(String imageUri, Object extra)
        throws FileNotFoundException {
    ContentResolver res = context.getContentResolver();
    Uri uri = Uri.parse(imageUri);
    if (imageUri.startsWith("content://com.android.contacts/")) {
        // return ContactsContract.Contacts.openContactPhotoInputStream(res,
        // uri);
        return getContactBitmapFromURI(context, uri);
    } else {
        return res.openInputStream(uri);
    }
}

public static InputStream getContactBitmapFromURI(Context context, Uri uri)
        throws FileNotFoundException {
    InputStream input = context.getContentResolver().openInputStream(uri);
    if (input == null) {
        return null;
    }
    return input;
    // return BitmapFactory.decodeStream(input);
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM