2017-05-29 13 views
1

私は非常にinteristing問題に遭遇しました。私が持っているので、私は多くの質問がピカソが弱い参照に画像を読み込まないについて尋ねされている知っているが、私はそうではないと思う最初の呼び出しでピカソが最初の呼び出しで画像を読み込まない

  final Target target = new Target() { 
       @Override 
       public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
        // loaded bitmap is here (bitmap) 
        Log.i(TAG, "bitmapLoaded"); 
        imageView.setImageBitmap(bitmap); 
       } 

       @Override 
       public void onBitmapFailed(Drawable errorDrawable) { 
        Log.i(TAG, "bitmapFailed"); 
       } 

       @Override 
       public void onPrepareLoad(Drawable placeHolderDrawable) { 

       } 
      }; 

      imageView.setTag(target); 

      Picasso.with(this) 
        .load(photoUrl) 
        .into(target); 

:私はピカソを使用してビットマップをロードするには以下のコードを使用しています上記のようなターゲットを参照するために、多くのトピックで提案された解決方法に従った。

私のプログラムでは、この同じコードを3つの異なるクラスと3つの異なる時点で使用します。私が気づいたことは、初めてこのメソッドを呼び出すときには動作しませんが、次回は3つの呼び出しのうちどれが使用されているかは関係ありません。私はこの3つの異なる方法からログに異なるメッセージを出力するので、それを言うことができます。

何が起こっているのか、何か逃してしまったのかな?

ありがとうございます。

答えて

0

これを達成するために、非同期アプローチを使用してください。

Picasso.with(context).load(URL).into(profile, new Callback() { 
       @Override 
       public void onSuccess() { 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() {//Use your "bitmap" here 

          Bitmap innerBitmap = ((BitmapDrawable) profile.getDrawable()).getBitmap(); 
        } 
       }, 100); 
      } 

また、あなたはグライドhttps://github.com/bumptech/glide

+0

あなたの例を使ってみましたが、run()メソッドが呼び出されましたが、ビットマップがimageViewに読み込まれませんでした。 –

+0

これは同じ問題です。初めてこのメソッドを呼び出すと機能しませんが、次回はこのメソッドが呼び出されます。それは変だ。 –

0

問題を使用しようとする場合があります。問題は、ピカソがターゲットクラスへの弱い参照を保持し、それがGARBAGEはを集めましたです。

解決方法:ローカル参照として使用する代わりに、クラスフィールドに変換してください。

関連する問題