2016-11-08 6 views
2

私はビューに画像をロードしようとしています。ときどき動作しますが、時には動作しないことがあります。私はAPIレベル19のエミュレータでテストしています。新しいターゲット内の障害ブロックは決して呼び出されません。私はprepareLoad、その後のいずれかを参照してください。ピカソで画像を読み込んでいても、常に表示されるとは限りません。

  1. onBitmapLoadedが呼び出され、画像は
  2. 画像が

はなぜこれが起こってしまうことが表示されません表示されますか?

これはエミュレータで発生しています。物理デバイスでは、Q & Aが100%の故障率を報告しています。他のデバイスでは断続的な障害発生率があります。何が起きてる?

public void setBackground() { 
    final LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout); 

    final Context context = this; 
    final String imagePath = getStore().backgroundImageURI;  

    if (getStore().backgroundImageNumber > 0) { 
     mainLayout.setBackground(context.getResources().getDrawable(getStore().backgroundImageNumber)); 
     return; 
    } 
    if (imagePath == null) { 
     mainLayout.setBackground(context.getResources().getDrawable(R.drawable.sk_collection_bg_default)); 
     return; 
    } 
    Picasso.with(this).load(imagePath).into(new Target(){ 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, LoadedFrom from) { 
      Log.v("Biscuit-width", String.valueOf(bitmap.getWidth())); 
      Log.v("Biscuit-height", String.valueOf(bitmap.getHeight())); 

      mainLayout.setBackground(new BitmapDrawable(context.getResources(), bitmap)); 
     } 

     @Override 
     public void onBitmapFailed(final Drawable errorDrawable) 
     { 
      Log.d("BISCUIT", "FAILED" + errorDrawable.toString()); 

     } 

     @Override 
     public void onPrepareLoad(final Drawable placeHolderDrawable) { 
      Log.d("TAG", "Prepare Load"); 
     } 
    }); 
} 

答えて

0

また、私はこの問題に直面しています、あなたは...のような

Picasso.Builder builder = new Picasso.Builder(this); 
     builder.listener(new Picasso.Listener() 
     { 
      @Override 
      public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) 
      { 
       exception.printStackTrace(); 
      } 
     }); 
     builder.build().load(imgURL) 
     .placeholder(R.drawable.ic_launcher) 
     .into(imageIMG); 
+0

記録されている例外は表示されません – quantumpotato

1

をピカソを使用する必要があり、私はしばらくの間、ピカソを使用していないが、戻って一日で、ターゲットはWeakReferencesたし、あなたはそれを厳密に言及しなければならなかった(これはもはや事実でない場合は私を許してください。しかし、Jake Whartonは、 "あなたは厳しい基準または目標を維持しなければならない"ということを非常に強く訴えていました。同じことを9000回以上(自分自身を含む)

このスタックを見てください同じ問題であると思われるものにオーバーフロー応答...

https://stackoverflow.com/a/26918731/2684

他の回答者(@lukasと@mradzinski)で述べたように、ピカソは、ターゲット・オブジェクトへの弱参照を保ちます。厳密な参照をあなたのクラスの1つに保存することはできますが、ターゲットがビューを何らかの方法で参照している場合でも、これは問題になる可能性があります。ピカソが明示的に避けてくれるもの)。

このような状況になっている場合は、ターゲットにビューをタグ付けすることをおすすめします。

+0

私は、アクティビティのターゲットをメンバ変数として保持し、それを参照するだけです。例えば、 – quantumpotato

+0

はい。 :) –

+1

私の一日を保存します。本当に便利なこの回答を受け入れてください –

関連する問題