FileNotFoundException: /storage/emulated/0/JsonParseTutorialCache: open failed: ENOENT (No such file or directory)
Ich bin mit GridView-Steuerelement zum laden von json-Daten, das die images enthält. Als ich realisierte Projekt es geschah einige Ausnahmen
AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
FileCache-Klasse:
public class FileCache {
private File cacheDir;
public FileCache(Context context) {
//Find the dir to save cached images
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
cacheDir = new File(
android.os.Environment.getExternalStorageDirectory(),
"JsonParseTutorialCache");
else
cacheDir = context.getCacheDir();
if (!cacheDir.exists())
cacheDir.mkdirs();
}
public File getFile(String url) throws IOException {
String filename = String.valueOf(url.hashCode());
//String filename = URLEncoder.encode(url);
File f = new File(cacheDir, filename);
f.createNewFile();
return f;
}
public void clear() {
File[] files = cacheDir.listFiles();
if (files == null)
return;
for (File f : files)
f.delete();
}
}
Logcat:
W/System.err: java.io.IOException: open failed: ENOENT (No such file or directory)
W/System.err: at java.io.File.createNewFile(File.java:939)
W/System.err: at com.totoroads.android.app.FileCache.getFile(FileCache.java:33)
W/System.err: at com.totoroads.android.app.ImageLoader.getBitmap(ImageLoader.java:64)
W/System.err: at com.totoroads.android.app.ImageLoader.access$000(ImageLoader.java:29)
W/System.err: at com.totoroads.android.app.ImageLoader$PhotosLoader.run(ImageLoader.java:155)
W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at java.io.File.createNewFile(File.java:932)
W/System.err: ... 9 more
Möchte ich herunterladen, Lesen und anzeigen von Bildern auf GridView, Wie fix diese Ausnahmen?
- "/storage/emulated/0/JsonParseTutorialCache/-1068682472" ich glaube nicht, dass dies eine gültige Datei-Pfad für ein Bild. Sie sollten überprüfen, wenn Sie Holen von file name richtig.
- Ich bekomme Bilder, die durch den parameter ist: TAG_ICONNAME="image"(vom json)
- Poste bitte eine Beispiel-json-Antwort zu.
- Ich habe aktualisiert, mehr FileCache-Klasse und JSON, Lesen Sie bitte oben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code in FileCache.java ist
Ein neues file-Objekt wurde erstellt, aber die Datei ist möglicherweise nicht vorhanden. So ersetzen Sie den obigen code, mit
Hoffe, es hilft.
Edit : Wie bist du mit den code auf >= Android 6.0, du musst die Anfrage für die Berechtigung zum Zugriff auf Externen Speicher zur Laufzeit. Das hinzufügen dieser in AndroidManifest.xml ist das nicht genug. Sie können dieser link, wie es zu tun.
Können Sie das Picasso-Bibliothek für die Anzeige von Bildern in der grid-Ansicht.
es ist eine Zeile code für das Bild laden.
Verwenden von Library-Funktionen für das laden von Bildern--
Picasso.mit(Kontext -).laden("YOURIMAGE").in(Bildansicht);
Können Sie auch die Größe der Bilder entsprechend Ihrer Anforderung.
und es ist auch verwalten intern cache-Mechanismus
Siehe Link für mehr info -
http://square.github.io/picasso/
Können Sie auch sparen Sie sich die
f.createNewFile
und verwendenFile.createTempFile(imageFileName, ".jpg", storageDir)
Also deine Methode wird jetzt