2016-10-16 3 views
0

私は前にしたいMainActivityは、すべての画像がロードされている情報を確認し、レンダリング:Picassoがアップロードしたすべてのファイルを確認するには?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    getBitmapsByURLs(urls); 
} 

public void getBitmapsByURLs(List<String> urls) { 
    final List<Target> targets = new ArrayList<>(); 

    for (int i = 0; i < urls.size(); i++) { 
     final int k = i; 
     Target target = new Target() { 

      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       Log.i("TEMP", "Loaded: " + k); 
       targets.remove(this); 
      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 
       targets.remove(this); 
      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 
       Log.i("TEMP", "Preparing: " + k); 
      } 
     }; 
     targets.add(target); 
     Picasso.with(this) 
       .load(urls.get(i)) 
       .memoryPolicy(NO_CACHE, NO_STORE) 
       .into(target); 
    } 
} 

私はすべての画像がロードされているもののonCreate内で確認することができますどのように? メソッドonCreate(getBitmapsByURLs呼び出し後)にwhileを書き込むと、すべての画像がロードされる前に呼び出されます。

+0

私はこれを試しています:http://stackoverflow.com/questions/33518703/picasso-first-run-not-call-onbitmaploaded-in-for-loop#comment65424167_33520908 – user3118720

答えて

0

あなたは画像をロードするために

Picasso.with(this) 
      .load(urls.get(i)) 
      .memoryPolicy(NO_CACHE, NO_STORE) 
      .into(target); 

を使用する場合、それはが終了し task.Firstピカソはinternet.Afterのダウンロードから画像をダウンロード非同期であることを知らなければならない、画像がロードされますもちろん、ダウンロードするときは、メインスレッドは決して待つことはありません.Picasso またはインターフェイスFutureのようなものを使用して、メインスレッドにダウンが終了したことを通知します.の後に何を書き込んでも、ピカソが写真をロードする前に呼び出されます(通常、p敵をターゲットにロードする)。 さらに詳しい情報はこちらonCreate()onCreate()がメインスレッドで呼び出されているため、時間のかかる作業を行うのはお勧めできません。アプリケーションが応答しないエラーが発生します。

関連する問題