2017-05-29 81 views
1

我遇到了一個非常複雜的問題。我現在用的波紋管代碼中使用畢加索加載位圖:畢加索在第一次來電時不會加載圖像

  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

我嘗試使用你的例子,但位圖沒有加載到imageView中,儘管調用了run()方法。 –

+0

這是同樣的問題,我第一次稱這種方法它不起作用,但下一次它會。這很奇怪。 –

0

問題:問題是畢加索持有弱引用對象類,它有垃圾回收

解決方案:將其轉換爲類字段,而不是將其用作本地參考。