投稿

2012の投稿を表示しています

Android でインターネットの画像をキャッシュする

Android アプリを作っていると、インターネットから画像を取得して利用することがよくありますが、 それをローカルにキャッシュするにはどうすればいいでしょう、という話を書きます。 ネットからのダウンロードはバックグラウンド・スレッドでやらないと(3.0 以降で)落ちるので、AsyncTask みたいにして doInBackground でダウンロードするとだいたいこんな風になるでしょうか (mUrl というインスタンス変数に画像の URL が入ってる)。 @Override protected Bitmap doInBackground(Void... params) { try { URL url = new URL(mUrl); URLConnection connection = url.openConnection(); connection.setUseCaches(true); // ここが大切 return BitmapFactory.decodeStream(connection.getInputStream()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } 途中の強調表示したところがポイントです。Java 標準でキャッシュする機能があるとか知らなかった。 実はこれだけでは動かなくて、どのようにキャッシュするのか自分で実装しないと駄目です。ResponseCache というクラスを継承して作ります。こんな感じです。 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;…

おひさ

久しく更新していなかったブログに火を入れる実験。 Syntax Highlighter が動かなくなってたので直した。