Tengo una aplicación que muestra imágenes GIF. Todo funciona bien si la imagen se guarda en dibujable, y acceder a ella como estoIOException - No se puede cargar el archivo
is=context.getResources().openRawResource(R.drawable.mygif);
movie = Movie.decodeStream(is);
pero necesito para descargar la imagen desde Internet, por lo que estoy guardándolo en CacheDir, que trabaja muy bien. Intenté lo siguiente para leerlo.
try
{
is = new BufferedInputStream(new FileInputStream(new File(context.getCacheDir(), "mygif.gif")));
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
movie = Movie.decodeStream(is);
Y esto
movie = Movie.decodeFile(new File(context.getCacheDir(), "mygif.gif").getPath());
Pero no importa qué, que termina con
java.io.IOException
at java.io.InputStream.reset(InputStream.java:218)
at android.graphics.Movie.decodeStream(Native Method)
at android.graphics.Movie.decodeTempStream(Movie.java:74)
at android.graphics.Movie.decodeFile(Movie.java:59)
o
java.io.IOException: Mark has been invalidated.
at java.io.BufferedInputStream.reset(BufferedInputStream.java:350)
at android.graphics.Movie.decodeStream(Native Method)
creo que es un error muy simple, pero no puedo superarlo. Manifiesto tiene:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Debe comprobar si la parte de descarga y almacenamiento está dañando el archivo. Después de que la aplicación descargue el archivo, puede sacarlo del emulador o dispositivo usando 'adb pull'. Luego puede verificar si es exactamente lo que hay en el servidor. –
Lo saqué del emulador, y está bien. La imagen es 13kB si de alguna manera es importante –
¿Ha intentado 'Movie.decodeFile (nuevo archivo (context.getCacheDir()," mygif.gif "). GetAbsolutePath())'? –