Tôi có một ứng dụng hiển thị hình ảnh GIF. Tất cả đều hoạt động tốt nếu hình ảnh được lưu trong drawable, và tôi truy cập vào nó như thế nàyIOException - Không thể tải tệp
is=context.getResources().openRawResource(R.drawable.mygif);
movie = Movie.decodeStream(is);
Nhưng tôi cần phải tải hình ảnh từ internet, vì vậy tôi lưu nó vào CacheDir, mà hoạt động tốt. Tôi đã thử những điều sau đây để đọc nó.
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);
Và đây
movie = Movie.decodeFile(new File(context.getCacheDir(), "mygif.gif").getPath());
Nhưng không có vấn đề gì, nó kết thúc với
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)
hoặc
java.io.IOException: Mark has been invalidated.
at java.io.BufferedInputStream.reset(BufferedInputStream.java:350)
at android.graphics.Movie.decodeStream(Native Method)
Tôi nghĩ rằng đó là một lỗi rất đơn giản, nhưng tôi có thể không vượt qua nó. Manifest có:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Bạn nên kiểm tra xem phần tải xuống và lưu có làm hỏng tệp hay không. Sau khi ứng dụng tải xuống tệp, bạn có thể kéo nó ra khỏi trình mô phỏng hoặc thiết bị bằng cách sử dụng 'adb pull'. Sau đó, bạn có thể kiểm tra xem đó là chính xác những gì trên máy chủ. –
Tôi kéo nó ra giả lập, và nó là tốt. Hình ảnh là 13kB nếu bằng cách nào đó là quan trọng –
Bạn đã thử 'Movie.decodeFile (tệp mới (context.getCacheDir()," mygif.gif "). GetAbsolutePath())'? –