Загрузка изображения из галереи в ImageView через Glide - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть намерение, когда пользователь выбирает изображение из своей галереи.Я хочу загрузить это изображение в ImageView с помощью библиотеки Glide.Кажется, что он не может обработать URI, который передается в Glide

        addPhotos.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            ActivityCompat.requestPermissions(CreateEvacuationProcedureActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);

            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("image/*");
            startActivityForResult(intent, OPEN_DOCUMENT_CODE);
        }
    });



    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == OPEN_DOCUMENT_CODE && resultCode == RESULT_OK) {
        if (data != null) {
            // this is the image selected by the user
            Uri imageUri = data.getData();
            System.out.println(new File(imageUri.getPath()));


            Glide.with(this)
                    .load(imageUri.getPath()) // Uri of the picture
                    .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            System.out.println(e.toString());
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            return false;
                        }
                    })
                    .into(imageOne);
        }

    }
}

Я получаю следующую ошибку в консоли от Glide:

I/Glide: Root cause (1 of 2)
java.io.FileNotFoundException: /document/image:2442 (No such file or directory)

1 Ответ

0 голосов
/ 26 декабря 2018

Поскольку возвращаемый uri находится в форме / document / image: 1234, Glide не может правильно определить путь, необходимо преобразовать его в абсолютный путь.Вы можете попробовать это!

String documentId = DocumentsContract.getDocumentId(uri);
if(isDocument(uri)){
    String id = documentId.split(":")[1];
    String selection = MediaStore.Images.Media._ID + "=?";
    String[] selectionArgs = {id};
    filePath = getDataColumn(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection, selectionArgs);
}

private boolean isDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}
...