在我的应用程序中,我试图检索电话簿联系人图像的图像并显示在列表中。下面是我的代码
public InputStream getContactPhoto(Context context, String profileId){
try{
ContentResolver cr = context.getContentResolver();
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(profileId));
return ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
}catch(Exception e){
return null;
}
}
private Bitmap loadContactPhoto(ContentResolver cr, long id) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
if (input == null) {
return null;
}
return BitmapFactory.decodeStream(input);
}
它的工作但不知何故它不顺利,所以想要使用asynctask实现获取图像 关于如何使用上述代码
的任何建议答案 0 :(得分:0)
如果您正在使用ImageView并想要加载图片(在此示例中,它从SDCard中检索图像),您可以这样做:
创建一个扩展ImageView的自定义类
public class SDImageView extends CacheableImageView {
...
}
使用您需要的参数创建一个名为load()
(或任何您想要的)的方法。在我的例子中是图像的路径:
public final void loadImage(final String tpath) {
if (tpath == null) {
return;
}
SDLoadAsyncTask.load(this, tpath);
}
- 创建一个扩展AsyncTask的类,并在doInBackground
方法中实现您想要执行的操作
private static class SDLoadAsyncTask extends AsyncTask<Void, Void, Bitmap> {
final SDImageView view;
final String path;
private SDLoadAsyncTask(SDImageView view, String path) {
this.view = view;
this.path = path;
}
@Override
protected final Bitmap doInBackground(Void... params) {
Bitmap bmp = null;
InputStream is = null;
try {
is = new FileInputStream(mContext.getExternalFilesDir(null) + "/" + path);
bmp = BitmapFactory.decodeStream(is);
} catch (Exception e) {
Utils.logMsg("Exception for img " + path, e);
} finally {
try {
is.close();
} catch (Exception e2) {
}
}
return bmp;
@Override
protected final void onPostExecute(Bitmap result) {
view.setImageBitmap(result);
}
}