在显示一个ImageView的接触画面。 [英] Displaying a contacts picture in imageview.
问题描述
我用下面的查询联系人的图片:
乌里phUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI,将String.valueOf(的ContactID));
因此,我得到的东西,如:
内容://com.android.contacts/contacts/3699
然后我尝试将它设置为图像视图:
乌里IMAGE_URI = Uri.parse(图片);
IMAGE_URI = Uri.withAppendedPath(IMAGE_URI,Contacts.Photo.CONTENT_DIRECTORY);
尝试{
((ImageView的)view.getTag(R.id.imageView1))setImageURI(IMAGE_URI)。 }赶上(例外五){
的System.out.println(E);
}
这引起文件的异常没有找到,但是的System.out.println()在catch块印坏的位图URI。以上code的正常工作,前几天,不知道怎么回事错了。
日志猫:(检查第一和最后一行)
九月一日至14日:25:19.271:W / ImageView的(3674):无法打开内容:内容://com.android.contacts/contacts/3699/photo
九月1日至14日:25:19.271:W / ImageView的(3674):java.io.FileNotFoundException:内容://com.android.contacts/contacts/3699/photo
九月1日至14日:25:19.271:W / ImageView的(3674):在android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:617)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:739)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:636)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.content.ContentResolver.openInputStream(ContentResolver.java:471)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.ImageView.resolveUri(ImageView.java:631)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.ImageView.setImageURI(ImageView.java:379)
九月1日至14日:25:19.271:W / ImageView的(3674):在com.exa.birthdayrem.FragmentTab3 $ CurAdapter.bindView(FragmentTab3.java:157)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:256)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.AbsListView.obtainView(AbsListView.java:2319)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.ListView.makeAndAddView(ListView.java:1793)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.ListView.fillDown(ListView.java:678)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.ListView.fillSpecific(ListView.java:1336)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.ListView.layoutChildren(ListView.java:1628)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.AbsListView.onLayout(AbsListView.java:2170)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.View.layout(View.java:13846)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewGroup.layout(ViewGroup.java:4466)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.FrameLayout.onLayout(FrameLayout.java:448)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.View.layout(View.java:13846)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewGroup.layout(ViewGroup.java:4466)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.FrameLayout.onLayout(FrameLayout.java:448)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.View.layout(View.java:13846)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewGroup.layout(ViewGroup.java:4466)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.FrameLayout.onLayout(FrameLayout.java:448)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.View.layout(View.java:13846)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewGroup.layout(ViewGroup.java:4466)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.View.layout(View.java:13846)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewGroup.layout(ViewGroup.java:4466)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.widget.FrameLayout.onLayout(FrameLayout.java:448)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.View.layout(View.java:13846)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewGroup.layout(ViewGroup.java:4466)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2168)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1926)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1140)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:4726)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:747)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.Choreographer.doCallbacks(Choreographer.java:567)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.Choreographer.doFrame(Choreographer.java:536)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:733)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.os.Handler.handleCallback(Handler.java:615)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.os.Handler.dispatchMessage(Handler.java:92)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.os.Looper.loop(Looper.java:153)
九月1日至14日:25:19.271:W / ImageView的(3674):在android.app.ActivityThread.main(ActivityThread.java:5000)
九月1日至14日:25:19.271:W / ImageView的(3674):在java.lang.reflect.Method.invokeNative(本机方法)
九月1日至14日:25:19.271:W / ImageView的(3674):在java.lang.reflect.Method.invoke(Method.java:511)
九月1日至14日:25:19.271:W / ImageView的(3674):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:821)
九月1日至14日:25:19.271:W / ImageView的(3674):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
九月1日至14日:25:19.271:W / ImageView的(3674):在dalvik.system.NativeStart.main(本机方法)
九月1日至14日:25:19.271:我/的System.out(3674):resolveUri没有坏的位图网址:内容://com.android.contacts/contacts/3699/photo
的乌里
,你有没有确切的文件,使用该id应使用检索图像 managedQuery
这个想法会是这样
私人无效setContactInfo(长ID){
位图photoBitmap = NULL;
乌里contactUri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI,ID);光标光标= managedQuery(contactUri,NULL,NULL,NULL,NULL);
cursor.moveToFirst();
contact_text.setText(cursor.getString(光标
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); // contact.text是用于显示联系人姓名一个TextView字符串ID = getIntent()的getData()getLastPathSegment()。
//照片光标串photoWhere = ContactsContract.Data.CONTACT_ID +=?与
+ ContactsContract.Data.MIMETYPE +=;
的String [] = photoWhereParams新的String [] {ID,
ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE};
光标photoCur = managedQuery(ContactsContract.Data.CONTENT_URI,空,
photoWhere,photoWhereParams,NULL);
photoCur.moveToFirst();
如果(photoCur.moveToFirst()及&放大器;!photoCur =空){ 字节[] = photoBlob photoCur.getBlob(photoCur
.getColumnIndex(Photo.PHOTO));
如果(photoBlob!= NULL){
photoBitmap = BitmapFactory.de codeByteArray的(photoBlob,0,
photoBlob.length); contact_image.setImageBitmap(photoBitmap); // contact_image是ImageView的
}其他{
photoBitmap = BitmapFactory.de codeResource(getResources()
android.R.drawable.ic_menu_report_image); // android.R.drawable.ic_menu_report_image是默认的图像,如果联系人没有存储任何图像
contact_image.setImageBitmap(photoBitmap);
}}
cursor.close;
photoCur.close;}
<一个href=\"http://stackoverflow.com/questions/11377509/how-to-retrieve-contact-picture-using-contact-id\">source
I use the following to query the image of a contact:
Uri phUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI,String.valueOf(contactId));
As a result I get something like:
content://com.android.contacts/contacts/3699
Then I try to set it to an image view:
Uri IMAGE_URI = Uri.parse(image);
IMAGE_URI= Uri.withAppendedPath(IMAGE_URI, Contacts.Photo.CONTENT_DIRECTORY);
try{
((ImageView) view.getTag(R.id.imageView1)).setImageURI(IMAGE_URI);
}catch (Exception e){
System.out.println(e);
}
It raises an exception of file not found, however the System.out.println() in the catch block prints a bad bitmap uri. The above code was working properly some days ago, wonder whats going wrong.
The Log cat: (Check the first and the last line)
01-14 09:25:19.271: W/ImageView(3674): Unable to open content: content://com.android.contacts/contacts/3699/photo
01-14 09:25:19.271: W/ImageView(3674): java.io.FileNotFoundException: content://com.android.contacts/contacts/3699/photo
01-14 09:25:19.271: W/ImageView(3674): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
01-14 09:25:19.271: W/ImageView(3674): at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:617)
01-14 09:25:19.271: W/ImageView(3674): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:739)
01-14 09:25:19.271: W/ImageView(3674): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:636)
01-14 09:25:19.271: W/ImageView(3674): at android.content.ContentResolver.openInputStream(ContentResolver.java:471)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.ImageView.resolveUri(ImageView.java:631)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.ImageView.setImageURI(ImageView.java:379)
01-14 09:25:19.271: W/ImageView(3674): at com.exa.birthdayrem.FragmentTab3$CurAdapter.bindView(FragmentTab3.java:157)
01-14 09:25:19.271: W/ImageView(3674): at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:256)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.AbsListView.obtainView(AbsListView.java:2319)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.ListView.makeAndAddView(ListView.java:1793)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.ListView.fillDown(ListView.java:678)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.ListView.fillSpecific(ListView.java:1336)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.ListView.layoutChildren(ListView.java:1628)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.AbsListView.onLayout(AbsListView.java:2170)
01-14 09:25:19.271: W/ImageView(3674): at android.view.View.layout(View.java:13846)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewGroup.layout(ViewGroup.java:4466)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-14 09:25:19.271: W/ImageView(3674): at android.view.View.layout(View.java:13846)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewGroup.layout(ViewGroup.java:4466)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-14 09:25:19.271: W/ImageView(3674): at android.view.View.layout(View.java:13846)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewGroup.layout(ViewGroup.java:4466)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-14 09:25:19.271: W/ImageView(3674): at android.view.View.layout(View.java:13846)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewGroup.layout(ViewGroup.java:4466)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
01-14 09:25:19.271: W/ImageView(3674): at android.view.View.layout(View.java:13846)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewGroup.layout(ViewGroup.java:4466)
01-14 09:25:19.271: W/ImageView(3674): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-14 09:25:19.271: W/ImageView(3674): at android.view.View.layout(View.java:13846)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewGroup.layout(ViewGroup.java:4466)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2168)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1926)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1140)
01-14 09:25:19.271: W/ImageView(3674): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4726)
01-14 09:25:19.271: W/ImageView(3674): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:747)
01-14 09:25:19.271: W/ImageView(3674): at android.view.Choreographer.doCallbacks(Choreographer.java:567)
01-14 09:25:19.271: W/ImageView(3674): at android.view.Choreographer.doFrame(Choreographer.java:536)
01-14 09:25:19.271: W/ImageView(3674): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:733)
01-14 09:25:19.271: W/ImageView(3674): at android.os.Handler.handleCallback(Handler.java:615)
01-14 09:25:19.271: W/ImageView(3674): at android.os.Handler.dispatchMessage(Handler.java:92)
01-14 09:25:19.271: W/ImageView(3674): at android.os.Looper.loop(Looper.java:153)
01-14 09:25:19.271: W/ImageView(3674): at android.app.ActivityThread.main(ActivityThread.java:5000)
01-14 09:25:19.271: W/ImageView(3674): at java.lang.reflect.Method.invokeNative(Native Method)
01-14 09:25:19.271: W/ImageView(3674): at java.lang.reflect.Method.invoke(Method.java:511)
01-14 09:25:19.271: W/ImageView(3674): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
01-14 09:25:19.271: W/ImageView(3674): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
01-14 09:25:19.271: W/ImageView(3674): at dalvik.system.NativeStart.main(Native Method)
01-14 09:25:19.271: I/System.out(3674): resolveUri failed on bad bitmap uri: content://com.android.contacts/contacts/3699/photo
The Uri
that you have is not the exact file , Using that id you should retrieve the image using managedQuery
The idea will be like this
private void setContactInfo(long id){
Bitmap photoBitmap = null;
Uri contactUri = ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, id);
Cursor cursor = managedQuery(contactUri, null, null, null, null);
cursor.moveToFirst();
contact_text.setText(cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));//contact.text is a textView used to displays the contact name
String id = getIntent().getData().getLastPathSegment();
// Photo cursor
String photoWhere = ContactsContract.Data.CONTACT_ID + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] photoWhereParams = new String[] { id,
ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE };
Cursor photoCur = managedQuery(ContactsContract.Data.CONTENT_URI, null,
photoWhere, photoWhereParams, null);
photoCur.moveToFirst();
if (photoCur.moveToFirst() && photoCur != null) {
byte[] photoBlob = photoCur.getBlob(photoCur
.getColumnIndex(Photo.PHOTO));
if (photoBlob != null) {
photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0,
photoBlob.length);
contact_image.setImageBitmap(photoBitmap);//contact_image is an ImageView
} else {
photoBitmap = BitmapFactory.decodeResource(getResources(),
android.R.drawable.ic_menu_report_image);//android.R.drawable.ic_menu_report_image is the default image if a Contact doesn't have any image stored
contact_image.setImageBitmap(photoBitmap);
}
}
cursor.close;
photoCur.close;
}
这篇关于在显示一个ImageView的接触画面。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!