java.io.ioexception: open failed: einval (argument non Valide) lors de l'enregistrement d'une image pour le stockage externe
C'est mon code:
private boolean writeToSD(Bitmap bm, String url) {
if (canIWriteOnSD()) {
File sd = Environment.getExternalStorageDirectory();
File dest = new File(sd, "MoveInBlue/");
try {
url = urlCleaner(url);
if (!dest.exists()) {
dest.mkdir();
}
File file = new File(dest, url + ".png");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
//Do nothing
}
}
return false;
}
PROBLÈME RÉSOLU:
urlCleaner maintenant renvoie l'url.substring(url.lastIndexOf('?')+1), et tout fonctionne comme prévu.
L'exception est générée à file.createNewFile();
et je ne sais pas vraiment pourquoi.
Merci beaucoup.
(urlCleaner enlève juste le http://... à partir de l'url et laisse les balises php)
Voici le LogCat:
07-09 13:57:13.479: W/System.err(5715): java.io.IOException: open failed: EINVAL (Invalid argument)
07-09 13:57:13.479: W/System.err(5715): at java.io.File.createNewFile(File.java:940)
07-09 13:57:13.479: W/System.err(5715): at com.moveinblue.planner.asynctask.ImageDownloader.writeToSD(ImageDownloader.java:459)
07-09 13:57:13.479: W/System.err(5715): at com.moveinblue.planner.asynctask.ImageDownloader.access$2(ImageDownloader.java:448)
07-09 13:57:13.479: W/System.err(5715): at com.moveinblue.planner.asynctask.ImageDownloader$BitmapDownloaderTask.onPostExecute(ImageDownloader.java:270)
07-09 13:57:13.479: W/System.err(5715): at com.moveinblue.planner.asynctask.ImageDownloader$BitmapDownloaderTask.onPostExecute(ImageDownloader.java:1)
07-09 13:57:13.479: W/System.err(5715): at android.os.AsyncTask.finish(AsyncTask.java:602)
07-09 13:57:13.479: W/System.err(5715): at android.os.AsyncTask.access$600(AsyncTask.java:156)
07-09 13:57:13.479: W/System.err(5715): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
07-09 13:57:13.479: W/System.err(5715): at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 13:57:13.479: W/System.err(5715): at android.os.Looper.loop(Looper.java:137)
07-09 13:57:13.479: W/System.err(5715): at android.app.ActivityThread.main(ActivityThread.java:4575)
07-09 13:57:13.489: W/System.err(5715): at java.lang.reflect.Method.invokeNative(Native Method)
07-09 13:57:13.489: W/System.err(5715): at java.lang.reflect.Method.invoke(Method.java:511)
07-09 13:57:13.489: W/System.err(5715): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
07-09 13:57:13.489: W/System.err(5715): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
07-09 13:57:13.489: W/System.err(5715): at dalvik.system.NativeStart.main(Native Method)
07-09 13:57:13.489: W/System.err(5715): Caused by: libcore.io.ErrnoException: open failed: EINVAL (Invalid argument)
07-09 13:57:13.489: W/System.err(5715): at libcore.io.Posix.open(Native Method)
07-09 13:57:13.489: W/System.err(5715): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-09 13:57:13.489: W/System.err(5715): at java.io.File.createNewFile(File.java:933)
07-09 13:57:13.489: W/System.err(5715): ... 15 more
pouvez-vous s'il vous plaît ajouter le logcat de sortie avec l'exception levée?
Ouaip, c'est pas un manifeste question.
Ouaip, c'est pas un manifeste question.
OriginalL'auteur 1CjaWfbSbARo | 2012-07-09
Vous devez vous connecter pour publier un commentaire.
La chaîne
url
contient des caractères illégaux pour un nom de fichier. Vous aurez besoin de nettoyage le nom du fichier en supprimant les caractères illégaux.Android fonctionne comme ça.
Pour les caractères illégaux: stackoverflow.com/questions/2679699/...
OriginalL'auteur David Wasser