0

この AsyncTask を作成して、画像をダウンロードして電話に保存しました。画像が既に存在する場合は、画像をダウンロードするコードをスキップする必要がありますが、 f.exists() に到達するたびに、画像が以前に保存されている場合でも false になります。これはなぜでしょうか?

private class fanartDownloader extends AsyncTask<String, Integer, String> {
        //First argument is image url and the second is the show id
        @Override
        protected String doInBackground(String... args) {
            String fanartUrl = args[0];
            fanartUrl = fanartUrl.substring(0, fanartUrl.length() - 4);
            //Add proper end for small image
            fanartUrl += SMALL_FANART_URL_END;
            try {
                String path = getApplicationContext().getFilesDir().toString();
                path = path + "/" + args[1] + "/";
                File f = new File(path, "fanart.jpg");
                if (f.exists()) {

                }
                else {
                    f.mkdir();
                    URL url_value = new URL(fanartUrl);
                    Bitmap fanart = BitmapFactory.decodeStream(url_value.openConnection().getInputStream());
                    FileOutputStream out = new FileOutputStream(path);
                    fanart.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    out.flush();
                    out.close();
                }

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

    }
}

今、私はこのわずかに異なる繰り返しで問題を解決しました:

private class fanartDownloader extends AsyncTask<String, Integer, String> {
        //First argument is image url and the second is the show id
        @Override
        protected String doInBackground(String... args) {
            String fanartUrl = args[0];
            fanartUrl = fanartUrl.substring(0, fanartUrl.length() - 4);
            //Add proper end for small image
            fanartUrl += SMALL_FANART_URL_END;
            try {
                String file = args[1] + "_" + "fanart.jpg";
                String path = getApplicationContext().getFilesDir().toString();
                path = path + "/" + file;
                File f = new File(path);
                if (f.exists()) {

                }
                else {
                    URL url_value = new URL(fanartUrl);
                    Bitmap fanart = BitmapFactory.decodeStream(url_value.openConnection().getInputStream());
                    FileOutputStream out = getApplicationContext().openFileOutput(file, MODE_PRIVATE);
                    fanart.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    out.flush();
                    out.close();
                }

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

    }
}

最初の AsyncTask が機能しない理由を知っている人はいますか?

4

0 に答える 0