0

リストビューを埋めようとしています。リスト ビューのすべてのアイテムには、テキスト (タイトル) と画像 (サムネイル) が含まれています。私の画像はサーバーからダウンロードされます。そのため、リスト ビューにアイテムを追加するたびに、イメージが既に存在するかどうかを確認し、存在しない場合は非同期タスクでダウンロードします。非同期タスクの実行が終了したら、ダウンロードしたイメージをアイテム リスト ビューに配置します。

private class Thumbnails extends AsyncTask<Void, Integer, Void>
    {
        private Bitmap bitmap;

        private File fileTest;

        private String extStorageDirectory;

        @Override

        protected void onPreExecute() {

            super.onPreExecute();
        }

        @Override

        protected void onProgressUpdate(Integer... values){

            super.onProgressUpdate(values);
        }

        @Override

        protected Void doInBackground(Void... arg0) {

            Log.i("DocumentListItem","start downloading thumbnail = "+thumbnailURL);

            try{

                extStorageDirectory = Environment.getExternalStorageDirectory().toString();

                fileTest = new File(extStorageDirectory+"/AAAA/"+mDocument.getTitle()); 

                if(fileTest.exists()){

                    BitmapFactory.Options options = new BitmapFactory.Options();

                    options.inPreferredConfig = Bitmap.Config.ARGB_8888;

                    bitmap = BitmapFactory.decodeFile(fileTest.getAbsolutePath(), options);

                }
                else{

                    bitmap = BitmapFactory.decodeStream(new URL(thumbnailURL).openConnection().getInputStream());

                }

            } catch (MalformedURLException e) {

                e.printStackTrace();

            } catch (IOException e) {

                e.printStackTrace();
            }

            return null;
        }

        @Override

        protected void onPostExecute(Void result) {

                if (bitmap != null){

                    bitmapThumbnail = bitmap;

                    mImage.setImageBitmap(bitmap);
                }

                if(fileTest.exists()){

                }else{

                    try {

                        File folder = new File(extStorageDirectory, "AppoxySavedFiles");

                        folder.mkdir();

                        File file = new File(folder, mDocument.getTitle());

                        FileOutputStream out = new FileOutputStream(file);

                        bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);

                    } catch (Exception e) {

                        e.printStackTrace();
                    }
                }

        }
    }

問題は、表紙の画像のサムネイルがランダムに読み込まれ、適切なドキュメント アイテムに適切に関連付けられないことです。上下にスクロールすると、サムネイルが再配置されます。

誰が何が間違っているのか考えていますか?

4

1 に答える 1

0

cacoisによるブログがあります。彼は非同期遅延読み込み画像とそれらをSDカードにキャッシュすることについて投稿し、サンプルプロジェクトをgithubに配置しました。

それは私の問題を解決するのに役立ちました。それはまたあなたの問題を解決するのを助けるかもしれません。

于 2012-11-01T10:02:09.383 に答える