【问题标题】:Use Universal Image Loader to load PHOTO_URI of contact使用 Universal Image Loader 加载联系人的 PHOTO_URI
【发布时间】:2014-05-15 18:39:23
【问题描述】:

现在我遇到了一些问题:

05-14 16:20:59.355: D/ImageLoader(31397): 开始显示图片任务 [内容://com.android.contacts/contacts/281/photo_120x120] 05-14 16:20:59.360:D/ImageLoader(31397):从网络加载图像 [内容://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: 内容://com.android.contacts/contacts/281/photo/photo 05-14 16:20:59.445:E/ImageLoader(31397): java.lang.IllegalArgumentException: URI: 内容://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/ImageLoader(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(LoadAndDisplayImageTask.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)

我尝试扩展 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);
        }
    }

但没有成功。

请帮帮我。

感谢和问候

【问题讨论】:

    标签: java android gridview lazy-loading universal-image-loader


    【解决方案1】:

    我认为您遇到了此处描述(并已解决)的问题:Load Contact Image Into Bitmap。作为参考,解决方案是将联系人本身的 URI 传递给 openContactPhotoInputStream(),而不是联系人照片的 URI。

    【讨论】:

      【解决方案2】:

      使用下面的代码对我来说工作正常。我希望它也对你有用......

      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);
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-24
        • 2019-01-13
        • 1970-01-01
        • 2013-12-26
        • 2013-10-17
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多