У меня есть приложение, которое показывает изображения GIF. Это все работает нормально, если изображение будет сохранено в вытяжке, и я к нему доступ, как этотIOException - Не удается загрузить файл
is=context.getResources().openRawResource(R.drawable.mygif);
movie = Movie.decodeStream(is);
Но мне нужно, чтобы загрузить изображение из Интернета, так что я спасаю его CacheDir, что работает отлично. Я попробовал прочитать это.
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);
И это
movie = Movie.decodeFile(new File(context.getCacheDir(), "mygif.gif").getPath());
Но независимо от того, что она заканчивается
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)
или
java.io.IOException: Mark has been invalidated.
at java.io.BufferedInputStream.reset(BufferedInputStream.java:350)
at android.graphics.Movie.decodeStream(Native Method)
Я думаю, что это очень простая ошибка, но я не могу Не переживай. Manifest имеет:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Вы должны проверить, не повреждает ли файл для загрузки и сохранения. После того, как приложение загрузит файл, вы можете вытащить его из эмулятора или устройства, используя 'adb pull'. Затем вы можете проверить, точно ли это на сервере. –
Я вытащил его из эмулятора, и все в порядке. Изображение 13kB, если это так важно –
Вы пробовали 'Movie.decodeFile (новый файл (context.getCacheDir()," mygif.gif "). GetAbsolutePath())'? –