gpt4 book ai didi

java - 访问空联系人照片时出现 KitKat ANR

转载 作者:行者123 更新时间:2023-11-29 08:55:59 24 4
gpt4 key购买 nike

对于我的应用程序,我从 ContactsContract API 读取联系人的照片,该 API 在 Android KitKat 之前运行良好。我在 4.4 更改日志中找不到关于 ContactsContract.Contacts.openContactPhotoInputStream() 方法更改的任何具体内容,但我只能在 KitKat 上复制它,并且当没有该联系人的照片时。

我使用这个从联系人中读取:

public static Bitmap getContactPhoto(final Uri lookupUri, final Context context, boolean preferHighRes) 
throws IOException, OutOfMemoryError, NullPointerException{
InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
lookupUri, preferHighRes);
BufferedInputStream input = new BufferedInputStream(photo_stream);
Bitmap contactImg = BitmapFactory.decodeStream(input);
input.close();
return contactImg;
}

这个方法是这样调用的:

private class retrieveContactPhoto extends AsyncTask<Void, Void, Bitmap> {

Uri contactUri;
ImageView imageView;

public retrieveContactPhoto(Uri contactUri, ImageView iView){
this.contactUri = contactUri;
this.imageView = iView;
}

@Override
protected void onPreExecute(){
imageView.setImageResource(R.drawable.friend_image_default);
}

@Override
protected Bitmap doInBackground(Void... params) {
Bitmap image;
try {
image = ContactLookup.getContactPhoto(contactUri, mContext, true);
} catch (Exception e) {
image = null;
}
return image;
}

@Override
protected void onPostExecute(Bitmap image) {
if(image!=null){
imageView.setImageBitmap(image);
}
}
}

这会工作几秒钟,但之后我会在 LogCat 中遇到很多麻烦(通常超过 50 万行错误!?)

11-28 11:05:03.067: W/System.err(9507): java.io.IOException: BufferedInputStream is closed
11-28 11:05:03.077: W/System.err(9507): at java.io.BufferedInputStream.streamClosed(BufferedInputStream.java:118)
11-28 11:05:03.087: W/System.err(9507): at java.io.BufferedInputStream.read(BufferedInputStream.java:279)
11-28 11:05:03.097: W/System.err(9507): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
11-28 11:05:03.097: W/System.err(9507): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:719)
11-28 11:05:03.097: W/System.err(9507): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:791)
11-28 11:05:03.097: W/System.err(9507): at com.repay.android.addDebt.ContactLookup.getContactPhoto(ContactLookup.java:31)
11-28 11:05:03.097: W/System.err(9507): at com.repay.android.StartFragmentAdapter$retrieveContactPhoto.doInBackground(StartFragmentAdapter.java:110)
11-28 11:05:03.097: W/System.err(9507): at com.repay.android.StartFragmentAdapter$retrieveContactPhoto.doInBackground(StartFragmentAdapter.java:1)
11-28 11:05:03.097: W/System.err(9507): at android.os.AsyncTask$2.call(AsyncTask.java:264)
11-28 11:05:03.107: W/System.err(9507): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-28 11:05:03.107: W/System.err(9507): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-28 11:05:03.107: W/System.err(9507): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
11-28 11:05:03.117: W/System.err(9507): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-28 11:05:03.117: W/System.err(9507): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-28 11:05:03.117: W/System.err(9507): at java.lang.Thread.run(Thread.java:864)

我不确定为什么它现在说流被关闭,因为这不会发生在任何其他版本的 Android 上。此外,如果它不在工作线程中,仍会出现此错误。

最佳答案

你能试着对你的代码做一点小改动吗?我遇到了类似的问题 - 我的应用一直处于无限循环中。

试试这个:

InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream((ContentResolver) getContentResolver().query(ContactData, null, null, null, null),lookupUri, preferHighRes);

这对我有用。

关于java - 访问空联系人照片时出现 KitKat ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com