Как загрузить картинку с помощью Glide из внешней папки - PullRequest
0 голосов
/ 30 мая 2020

Я разрабатываю приложение для своей тети ie: приложение отображает рецепты в виде карточек внутри представления Recycler, данные поступают из базы данных SQLite.

На данный момент изображения просто статичны. c внутри @drawable / ... Я читал, что папка «@drawable» скомпилирована в apk и недоступна постфактум. Следовательно, необходимо хранить изображения извне.

В БД хранятся имена файлов.

На карте отображается основная c информация, при щелчке по карте открывается другое действие, отображающее полную информацию.

Все работает отлично ИСКЛЮЧАЯ

Я, очевидно, хочу, чтобы она могла загружать картинки и добавлять информацию, картинки будут храниться в: "/ sdcard / Pictures / Recipes / "

Я использую Glide в соответствии с рекомендациями, однако Glide выдает следующую ошибку:

class com.bumptech.glide.load.engine.GlideException: Failed to load resource
    There were 3 causes:
    java.io.FileNotFoundException(/sdcard/Pictures/Recipes/carrot_cake.jpg: open failed: EFAULT (Bad address))
    java.io.FileNotFoundException(open failed: EFAULT (Bad address))
    java.io.FileNotFoundException(open failed: EFAULT (Bad address))...

Если я использую следующий код:

    String image = "/sdcard/Pictures/Recipes/carrot_cake.jpg"; // hard coded for example
    File file = new File( image );
    if( file.exists() && file.canRead() )
    {
        Log.d( TAG, "File exists" );
        Glide.with( context ).load( image ).into( foodImage ); // foodImage = ImageView
    }

В журнале отображается "Файл существует", однако Glide не загружается и сообщает об упомянутой выше ошибке.

Ответы [ 3 ]

0 голосов
/ 30 мая 2020

Проверьте это:

String path = Environment.getExternalStorageDirectory().toString() + "/Pictures/Recipes/carrot_cake.jpg";
if( file.exists() && file.canRead() ) {
    Log.d( TAG, "File exists" );
    Glide.with( context ).load( new File(path)).into( foodImage ); // foodImage = ImageView
}
0 голосов
/ 05 июня 2020

После долгих исследований и головокружения Следующий код значительно изменен для краткости и простоты, очевидно, что чтение файлов будет go в пользовательский объект и обновлен адаптер для представления корзины.

File folder = new File( getExternalFilesDir( Environment.DIRECTORY_PICTURES ) + IMAGE_DIR );  // where IMAGE_DIR is the folder you want to save or retrieve files from
File[] fileList = folder.listFiles();
String fileName = fileList[0].getPath();
Glide.with( context ).load( fileName ).into( imageView );

Примечание getExternalStorageDirectory () и др. все устарели с API 29

Также , вам нужно добавить разрешения, но это уже другая история.

0 голосов
/ 30 мая 2020

Попробуйте это

File directory = Environment.getExternalStorageDirectory();

//Get the text file
File file = new File(directory, "Pictures/Recipes/carrot_cake.jpg");

...
...