Java 毕加索加载照片缩略图URI,但不加载照片URI
在我遇到这个障碍之前,用毕加索加载图像似乎很容易。不知道为什么!如果联系人只有缩略图,或者如果我特别要求照片缩略图,我可以通过照片URI从联系人加载照片Java 毕加索加载照片缩略图URI,但不加载照片URI,java,android,android-contacts,picasso,Java,Android,Android Contacts,Picasso,在我遇到这个障碍之前,用毕加索加载图像似乎很容易。不知道为什么!如果联系人只有缩略图,或者如果我特别要求照片缩略图,我可以通过照片URI从联系人加载照片 @Override public void bindView(View view, Context context, Cursor cursor) { ImageView icon = (ImageView)view.findViewById(R.id.ContactImage); String
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView icon = (ImageView)view.findViewById(R.id.ContactImage);
String photoUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI));
if (photoUri == null) {
icon.setImageDrawable(null);
} else {
Picasso.with(context).load(photoUri).into(icon);
}
}
值得一提的是:如果我使用毕加索.with(context).load(photoUri).placeholder(R.drawable.placeholder).error(R.drawable.error).into(icon)然后我在每个具有高分辨率图像的联系人的位置上看到占位符图像。我从来没有看到过“错误”图片。如果我恢复到只使用icon.setImageURI(Uri.parse(photoUri))代码>然后我再次看到高分辨率的联系人图像。(但我没有时髦的异步缓存图片加载器!)
更新:多亏了@copolii和他下面的答案,以下内容现在可以完美地与毕加索2.1.1配合使用:
@Override
public void bindView(View view, Context context, Cursor cursor) {
Long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
String photoUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI));
ImageView icon = (ImageView)view.findViewById(R.id.ContactImage);
if (photoUri == null) {
icon.setImageDrawable(null);
} else {
Picasso
.with(context)
.load(contactUri)
.into(icon);
}
}
这将加载高分辨率照片,如果有,则显示低分辨率照片,如果没有联系人的照片集,则将其设置为空白/空。是否尝试使用联系人uri
openContactPhotoInputStream
中的最后一个布尔参数承诺,如果有高分辨率照片,它将为您提供高分辨率照片
不要使用照片uri
而是使用联系人uri
或联系人查找uri
更新
既然问题已经回答了,我想我会在这里发布相关细节:
此处发布了一个小型测试应用程序(您需要Android Studio):
如果同时设置了占位符
和错误
图标,则会为没有图片的联系人显示错误
图标。我建议将社交面孔设置为你的占位符和无错误图标。这样,如果联系人没有照片,您的占位符将保持打开状态
如果您想区分这两种情况,请在选择错误图标时牢记以上内容(即不要使用红色大OMFG错误指示器)
--以前的内容--
如果有帮助,请告诉我
我为联系人照片加载做了工作,除非我遗漏了什么,否则您应该自动获得高分辨率图片(API 14+):
if (SDK_INT < ICE_CREAM_SANDWICH) {
return openContactPhotoInputStream(contentResolver, uri);
} else {
return openContactPhotoInputStream(contentResolver, uri, true);
}
if(SDK\u INT
openContactPhotoInputStream似乎不喜欢照片URI
如果URI是可区分的,我也可以轻松添加对PHOTO_URI的支持(不过我必须先了解如何加载它)。我已经在确定给定的uri是联系人照片uri还是联系人查找uri(较旧的android版本不喜欢将查找uri输入到openContactPhotoInputStream
,因此我必须在将其传递到openContactPhotoInputStream
之前将查找uri解引用到联系人uri中)
我希望这会有所帮助。您是否尝试过使用联系人uri
openContactPhotoInputStream
中的最后一个布尔参数承诺,如果有高分辨率照片,它将为您提供高分辨率照片
不要使用照片uri
而是使用联系人uri
或联系人查找uri
更新
既然问题已经回答了,我想我会在这里发布相关细节:
此处发布了一个小型测试应用程序(您需要Android Studio):
如果同时设置了占位符
和错误
图标,则会为没有图片的联系人显示错误
图标。我建议将社交面孔设置为你的占位符和无错误图标。这样,如果联系人没有照片,您的占位符将保持打开状态
如果您想区分这两种情况,请在选择错误图标时牢记以上内容(即不要使用红色大OMFG错误指示器)
--以前的内容--
如果有帮助,请告诉我
我为联系人照片加载做了工作,除非我遗漏了什么,否则您应该自动获得高分辨率图片(API 14+):
if (SDK_INT < ICE_CREAM_SANDWICH) {
return openContactPhotoInputStream(contentResolver, uri);
} else {
return openContactPhotoInputStream(contentResolver, uri, true);
}
if(SDK\u INT
openContactPhotoInputStream似乎不喜欢照片URI
如果URI是可区分的,我也可以轻松添加对PHOTO_URI的支持(不过我必须先了解如何加载它)。我已经在确定给定的uri是联系人照片uri还是联系人查找uri(较旧的android版本不喜欢将查找uri输入到openContactPhotoInputStream
,因此我必须在将其传递到openContactPhotoInputStream
之前将查找uri解引用到联系人uri中)
我希望这能有所帮助。当我使用照片URI,但联系人没有高分辨率照片时,它会返回URI,如content://com.android.contacts/contacts/38/photo
,它工作正常,显示良好。但是如果他们有一张高分辨率的照片,它会返回一个类似content://com.android.contacts/display_photo/5
,这时我什么也得不到,或者,如果设置了占位符,那么占位符也得不到。更清楚的是,如果我使用photo\u THUMBNAIL\u URI,即使我正在运行KitKat,我也只能得到他们照片的低分辨率版本。绝对高于ICS。好的,谢谢。这是有用的信息。似乎openContactPhotoInputStream
无法像content://com.android.contacts/display_photo/5
我将在一个小测试应用程序中尝试一下,看看缺少什么。您是否尝试过使用联系人uri
?openContactPhotoInputStream
中的最后一个布尔参数承诺,如果有高分辨率照片,它将为您提供高分辨率照片。不要使用照片uri
使用联系人uri
或