これを使用してダウンロードして保存した画像のファイルサイズを取得しようとしていますAsyncTask
protected Bitmap doInBackground(String... params) {
String urldisplay = params[0];
if(params[1] != null)
newClan = params[1];
if(params[2] != null){
Context ctx = Home.getContext();
prevClan = params[2];
File f = new File(ctx.getFilesDir(), prevClan + ".png");
if(f.exists()){
File d = f.getAbsoluteFile();
d.delete();
}
}
Bitmap emblem = null;
try {
//get emblem from url
InputStream in = new java.net.URL(urldisplay).openStream();
emblem = BitmapFactory.decodeStream(in);
} catch (MalformedURLException e) {
Log.e(e.getClass().toString(), e.getMessage());
} catch (IOException e) {
Log.e(e.getClass().toString(), e.getMessage());
}
return emblem;
}
public static void saveImage(Bitmap img){
Context ctx = Home.getContext();
try {
FileOutputStream out = new FileOutputStream(ctx.getFilesDir().getPath() + File.separatorChar + newClan + ".png");
img.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (FileNotFoundException e) {
} catch (NullPointerException e1) {
Log.e("NullPointerException DownloadImageTask", e1.toString());//TODO
}
}
これはそのように呼ばれます
File emblemPath = new File(ctx.getFilesDir(), clan + ".png");
Log.e("image size", emblemPath.length()+"");//TODO
if(emblemPath.exists()){
emb.setImageDrawable(Drawable.createFromPath(emblemPath.toString()));
Log.e("Image exists", "size = " + emblemPath.length());//TODO
}
else{
String prevClan = pref.getString("prevClan", null);
emb.setImageBitmap(Storage.updateClanEmb(embURL, clan, prevClan));
Log.e("Image downloaded", "size = " + emblemPath.length());//TODO
}
この直前に、必要な変数を提供するログイン画面があります。ダウンロードしたイメージは に正しく表示されImageView
ますが、最初はファイル サイズが 0 です。ログアウトしてから再度ログインすると、正しいファイル サイズが表示されます。ログはここにあります:
- 05-25 04:52:32.973: E/result(22501): {"login":0,"clan":"Cosa Nostra","status":"0"}
- 05-25 04:52:32.984: E/Login success!(22501): Login success!
- 05-25 04:52:34.554: E/image size(22501): 0
- 05-25 04:52:35.953: E/Image downloaded(22501): size = 0
- 05-25 04:52:44.553: E/Logout(22501): Logged out
- 05-25 04:52:54.893: E/result(22501): {"login":0,"clan":"Cosa Nostra","status":"0"}
- 05-25 04:52:54.893: E/Login success!(22501): Login success!
- 05-25 04:52:57.034: E/image size(22501): 2461
- 05-25 04:52:57.094: E/Image exists(22501): size = 2461
画像を保存した後、ファイル サイズが正しくないのはなぜですか? アクセス方法が間違っていますか?補足として、私は Android の初心者であり、コンテキストの使用方法を完全には把握していません。これが私の問題かもしれないのではないかと心配しています。コードでは、Home はこれが呼び出されているアクティビティです。
編集:onPostExecute()
@Samarthのリクエストで
この行を追加しました
iv.setImageBitmap(result);
ダウンロードした画像を表示するiv
はどこにありますか。ImageView
結果のログはまったく同じでした。誰かがAsyncTask's onPostExecute()
メソッドで画像を設定する利点を説明できますか? 私のupdateClanEmblem
メソッドを含めるのを忘れたようですので、ここにあります:
/**
* Method to call DownloadImageTask which downloads then saves the updated clan emblem
*
* @param iv The ImageView to set the emblem to
* @param url The URL, as a String, to the page containing ONLY the clan emblem.
* @param newClan The new clan emblem to download.
* @param prevClan The old clan emblem to delete. Can be null.
*/
public static void updateClanEmb(ImageView iv, String url, String newClan, String prevClan){
String[] params = {
url,
newClan,
prevClan,
};
try {
new DownloadImageTask(iv).execute(params).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}