画像ファイルの場合:/storage/sdcard0/groupurchase/cache/http%3A%2F%2Fd2.lashouimg.com%2Fzt_mobile_220%2F201211%2F29%2F135417696321262100.jpg
imageLoaderは、正しくないデコードされたファイルパスを読み込もうとします。
02-25 13:20:51.085: E/ImageLoader(27155): java.io.FileNotFoundException: /storage/sdcard0/groupurchase/cache/http:/d2.lashouimg.com/zt_mobile_220/201211/29/135417696321262100.jpg: open failed: ENOENT (No such file or directory)
エンコードされた文字列をそのまま保持し、ストリームで読み取る必要があります。
この問題は、以下のイメージローダーコードが原因で発生します。
final class ImageLoadingInfo {
...
public ImageLoadingInfo(String uri, ImageView imageView, ImageSize targetSize, DisplayImageOptions options, ImageLoadingListener listener, ReentrantLock loadFromUriLock) {
this.uri = Uri.encode(uri, "@#&=*+-_.,:!?()/~'%");
...
}
}
いいえ、これは問題の理由ではありません。 実際、デバッグで問題を見つけることができません。
ファイルが本当に存在しますか?
はい。 ファイルが存在します...
電話4.2.1、GT-I9100、CyanogenMod
もう一つの例:
coverPhotoFilePath:/storage/sdcard0/picasa_tool/google%252520plus-1.jpg
03-01 09:40:21.880:E / ImageLoader(13598):/ storage / sdcard0 / picasa_tool / google%2520plus-1.jpg:オープンに失敗しました:ENOENT(そのようなファイルまたはディレクトリはありません)
03-01 09:40:21.880:E / ImageLoader(13598):java.io.FileNotFoundException:/storage/sdcard0/picasa_tool/google%2520plus-1.jpg:開くことができませんでした:ENOENT(そのようなファイルまたはディレクトリはありません)
shell @ android :/ storage / sdcard0 / picasa_tool $ ls goo *
ls goo *
google%252520plus-1.jpg
「25」はimageloaderによって削除されました。
google%252520plus-1.jpg-> google%2520plus-1.jpg
わかった..
new File(URI uri)はこれを実現します。
修正してみます。
あなたの変更があってもまだこの問題を抱えています、私はCM10 4.2.2(Samsung Vibrant)にもいます。
スナップショットjarを使用していますか?
私はいつもzipを取得して、自分でlibを作成します。
displayImage(...)
メソッドに渡すファイルの設定、表示オプション、URIを教えてください。
//Config ImageLoader
DisplayImageOptions.Builder lBuilder = new DisplayImageOptions.Builder();
lBuilder.showStubImage(R.drawable.ic_launcher);
lBuilder.bitmapConfig(Integer.parseInt(mPrefs.getString(PrefsActivity.KEY_APP_BITMAP_TYPE, "0")) == 0 ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
if (mPrefs.getBoolean(
PrefsActivity.KEY_APP_MEMCACHE_ENABLED_PREFERENCE, true))
lBuilder.cacheInMemory();
if (mPrefs.getBoolean(
PrefsActivity.KEY_APP_DISCCACHE_ENABLED_PREFERENCE, true))
lBuilder.cacheOnDisc();
mDisplayOptions = lBuilder.build();
// Create configuration for ImageLoader
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.discCache(new UnlimitedDiscCache(StorageHelper.getCacheDir()))
.threadPoolSize(5)
.threadPriority(Thread.NORM_PRIORITY-1)
.defaultDisplayImageOptions(mDisplayOptions)
.build(); // --
mImageLoader.init(config);
String lCoverURL = "file:///"+ lCoverFile.getAbsolutePath();
URI = file://// storage / sdcard0 / My Manga Reader / Naruto / cover.png
エラー
03-10 12:24:43.448: E/ImageLoader(5349): /storage/sdcard0/My%20Manga%20Reader/Cache/1526703973: open failed: ENOENT (No such file or directory)
03-10 12:24:43.448: E/ImageLoader(5349): java.io.FileNotFoundException: /storage/sdcard0/My%20Manga%20Reader/Cache/1526703973: open failed: ENOENT (No such file or directory)
03-10 12:24:43.448: E/ImageLoader(5349): at libcore.io.IoBridge.open(IoBridge.java:416)
03-10 12:24:43.448: E/ImageLoader(5349): at java.io.FileInputStream.<init>(FileInputStream.java:78)
03-10 12:24:43.448: E/ImageLoader(5349): at java.io.FileInputStream.<init>(FileInputStream.java:105)
03-10 12:24:43.448: E/ImageLoader(5349): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromFile(BaseImageDownloader.java:141)
はい、問題が発生したので、解決策を考えます。 APIの変更にはImageDownloader
が必要だと思いますが、本当に避けたいと思います。
現時点では、ファイルパスにスペース( "")を使用しないことをお勧めします。
セルゲイに感謝します。今は1.8.0を使用します。ご迷惑をおかけして申し訳ありません。
2013年3月10日15:22、「SergeyTarasevich」 [email protected]
書きました:
はい、問題が発生したので、解決策を考えます。 私は推測する
ImageDownloaderはAPIの変更に必要ですが、私は本当にそれを避けたいと思っています。現時点では、スペース( "")を使用しないことをお勧めします。
ファイルパス。—
このメールに直接返信するか、Gi tHubhttps://github.com/nostra13/Android-Universal-Image-Loader/issues/179#issuecomment-14687267で表示してください
。
実際、これは(完全に)修正されていません。 1.9.3を使用していますが、空白(%20)を含むディレクトリからSDカードから画像をロードすると、上記のエラーが発生します。
そして、どのURI文字列をImageLoaderに渡しますか?
/sdcard/Android/data/my.package/files/Pictures/directory%20taining%20whitespaces/some_image.jpg
「/sdcard/Android/data/my.package/files/Pictures/directoryintainingwhitespaces/some_image.jpg」を渡す必要があります
そういうわけで、URIからStringに変更しました...
Uriを使用したオーバーロードされたコンストラクターは素晴らしいでしょう。 Uri.toString()を使用したためにエラーが発生しました。これにより、空白の代わりに空白に%20が返されます。 または、%20(およびその他)が機能しないことに言及する必要があります(すでにどこかに記載されていますか?)
空白を%20に置き換えることは、私にとっては問題なく機能しています
%20
をスペース置き換えると正常に機能します。
String strUri = uri.toString();
strUri = strUri.replace("%20", " ");