Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问空联系人照片时KitKat ANR_Java_Android_Contactscontract - Fatal编程技术网

Java 访问空联系人照片时KitKat ANR

Java 访问空联系人照片时KitKat ANR,java,android,contactscontract,Java,Android,Contactscontract,对于我的应用程序,我从ContactsContract API中读取联系人的照片,该API在Android KitKat之前运行良好。我在4.4更改日志中找不到有关ContactsContract.Contacts.openContactPhotoInputStream()方法更改的任何具体信息,但我只能在KitKat上以及该联系人没有照片时复制此信息 我从联系人那里读到: public static Bitmap getContactPhoto(final Uri lookupUri, fin

对于我的应用程序,我从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);
        }
    }
}

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

您可以尝试对代码进行一些小的更改吗?我有一个类似的问题——我的应用程序只是停留在一个无限循环中

试试这个:

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

这对我很有效。

如果联系人未设置和照片,则您必须使用联系人的默认照片,您可以通过以下路径找到该照片:

\android sdk\platforms\android-v\data\res\drawable-\ic\u contact\u图片。‌​巴布亚新几内亚


你找到解决办法了吗?我也有类似的问题。ANR根据4.4中的联系人照片
InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream((ContentResolver) getContentResolver().query(ContactData, null, null, null, null),lookupUri, preferHighRes);