5

次の画像ダウンロード コードを Picasso 画像キャッシュでダウンロードしたいと考えています。

DownloadImage downloadImage = new DownloadImage(); 
downloadImage.execute(advert.getImgUrl());

private class DownloadImage extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... arg) {
        Bitmap bmp = null;
        try {
            URL url = new URL(arg[0]);
            bmp = BitmapFactory.decodeStream(url.openConnection()
                    .getInputStream());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return bmp;

    }

    @Override
    protected void onPostExecute(Bitmap result) {
        if (result == null) {
            Intent intent = new Intent(AdvertisingActivity.this,
                    AdvertisingErrorActivity.class);
            intent.putExtra("ad-error", "Error downloading image");
        }
        adImg.setImageBitmap(result);
        super.onPostExecute(result);
    }
}

これに関していくつか質問があります。

  1. 複数の画像を並行してダウンロードしたい。異なる URL 値で を繰り返し呼び出した場合Picasso.with(getActivity()).load(url);、これは実行されますか?

  2. あるアクティビティで画像をダウンロードして、別のアクティビティで使用したいと考えています。これは可能ですか?これはどのように行うことができますか?

  3. Picasso.with(getActivity()).load(url);同じ URL 値で 2 回以上呼び出した場合、画像がダウンロードされた後、後続の呼び出しのためにキャッシュされた画像が読み込まれますか?

  4. 画像のダウンロード プロセスが何らかの理由で失敗した場合、Picasso に失敗を報告させることはできますか?

4

1 に答える 1

13

あなたの質問をさらに調査した結果、これをコメントではなく回答として公開することにしました。

  1. はい - Picasso は画像を非同期的にロードするため、呼び出しを繰り返すと画像が並行してダウンロードされます。
  2. はい - 通常どおり呼び出しを行うだけで、Picasso がダウンロードした画像の再利用を処理します。たとえば、Activity1 で呼び出しPicasso.with(this).load("image1");、その後、Activity2 で同じ URL を呼び出します。画像は既に (メモリまたはデバイス ストレージに) キャッシュされており、Picasso は再度ダウンロードするのではなく、再利用します。
  3. はい - 上記を参照してください (Picasso は、可能な場合はキャッシュされた画像を自動的に使用します)
  4. これには、それほど明確な答えはないようです。できることの 1 つは、実際の画像の取得中にエラーが発生した場合に表示する画像を提供することです。

    Picasso.with(context) .load(url) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView);

    ウェブから画像を取得しようとしている間、「プレースホルダー」が表示されます。たとえば、URL が有効でない場合、またはインターネット接続がない場合、「エラー」画像が表示されます。

    更新、2014 年 3 月 17 日:

    Picasso は、失敗を報告するためのコールバックの使用をサポートしています。通常の呼び出し (上記の例など) を次のように変更します。

    .into(imageView, new Callback() {
        @Override
        public void onSuccess() {
            // TODO Auto-generated method stub    
        }
    
        @Override
        public void onError() {
            // TODO Auto-generated method stub
        }
    });
    

結論として、Picasso はあなたにとって最適なライブラリの選択であるように思えます。画像のダウンロードが非常に迅速かつ簡単になることは間違いないので、とても気に入っています。

于 2014-03-08T15:48:53.787 に答える