web-dev-qa-db-ja.com

グライドは内部ストレージからファイルをロードできません

画像のzipファイルをダウンロードしてgetFilesDir()で解凍するActivityを持っています。パスは次のとおりです:

/data/user/0/packagename/files/files/example.png

しかし、これらの画像を読み込もうとすると、表示されません。次のコードを使用してパスを取得し、画像を読み込みます。

   String loc = getFilesDir().getPath() + "/" + Config.IMAGES_LOCATION +"/";
   String imageloc = loc + model.getThumbnail();
   Glide.with(ActivityImageGallery.this).load(imageloc).into(image);

Imagelocのパスは保存場所と同じであり、そのパスからファイルを作成すると、存在することが示されます。

パスの前でfile://を使用してみましたが、それも機能しません。 WRITE_EXTERNAL ja READ_EXTERNAL権限が要求され、付与されます。

12
Stefan

これは私にとっては機能し、ファイルインスタンスを作成し、ロードするファイルのURIをImageViewに渡します

Glide.with(context)
    .load(new File(fileUri.getPath())) // Uri of the picture
    .into(profileAvatar);

追加したことを確認してください

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" /> 

RequestListenerを使用して、失敗した場合のエラーを追跡することもできます

new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                return false;
            }
10
Zeeshan Shabbir

これを使ってグライドのロードリスナーを使ってみましたか

1.Debug:-

https://stackoverflow.com/a/42067675/5492047

Glide.with(getActivity())
 .load(args.getString(IMAGE_TO_SHOW))
 .listener(new RequestListener<String, GlideDrawable>() {
     @Override
     public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
         return false;
     }

     @Override
     public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {

         return false;
     }
 })
 .into(imageFrame);

例外を確認しますか?

2。もう一度デバッグします。

任意のファイルエクスプローラーアプリを使用して、ファイルが読み込まれた正確な場所に移動してファイルを開くことができますか?.

3.Path

それは本当にパスの/ files/files /ですか?

4.Extensionファイルパスから.pngを削除して、ロードして確認できますか?

5。チュートリアル

すばらしいチュートリアルは、ここ https://futurestud.io/tutorials/glide-getting-started にあります。

1
Reyansh Mishra

これを試して

File c = new File(Environment.getExternalStorageDirectory() + "/data/user/0/packagename/files/files/example.png");
Glide.with(MainActivity.this).load(c).error(R.drawable.empty_pic).placeholder(R.drawable.empty_pic).into(image2);

またはこれを試してください

 Glide.with(getActivity()).load(new File(" your path").toString())
        .listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                Log.e("xmx1","Error "+e.toString());
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                Log.e("xmx1","no Error ");
                return false;
            }
        })
        .into(ivx);
0
Nilesh Rathod

内部ストレージを使用するには、ランタイム権限が必要です。次に、最新のグライドライブラリを使用して「com.github.bumptech.glide:glide:3.7.0」をコンパイルし、次のようにフォーマットします。

Glide.with(context).load(image path).into(Imageview);
0
Kumar PG

最初に画像パスをキャプチャします。カメラから画像をキャプチャするか、ギャラリーから画像を選択します(私はすでに読み取りおよび書き込み権限を付与していると想定しています)。次にこれを試してください

_Glide.with(context).load(new File(imagePath)).dontAnimate().error(R.drawable.errorImage).placeholder(R.drawable.placeholderImage).into(imageView);
_

.dontAnimate()を使用するのは、最初にロードしたとき(または余分な時間がかかったとき)にイメージがロードまたは表示されなかった可能性があるためです。それがお役に立てば幸いです。

0
Ajeet Choudhary