2017-01-04 3 views
0

Я пытаюсь загрузить несколько фотографий, используя picasso. вот мой код:Загрузка нескольких фотографий с Picasso

for(int i=1; i <=20; i++){ 
    String url = img_url + i + "/profile.jpg"; 
    String img_dir = img_dir + i; 
    Picasso.with(this).load(url).into(picassoImageTarget(getApplicationContext(),img_dir, img_name)); 

} 

Url сайта выглядит следующим образом:

site.com/img/equipment/1/profile.jpg, 
site.com/img/equipment/2/profile.jpg, 
site.com/img/equipment/3/profile.jpg 

и так далее ...

я попытался

Picasso.with(this).load(url).into(picassoImageTarget(getApplicationContext(),img_dir, img_name)); 

без для цикла и это работает. изображения не загружаются, когда я помещаю его внутри цикла.

вот моя цель

private Target picassoImageTarget(Context context, final String imageDir, final String imageName) { 
    Log.d("picassoImageTarget", " picassoImageTarget"); 
    ContextWrapper cw = new ContextWrapper(context); 
    final File directory = cw.getDir(imageDir, Context.MODE_PRIVATE); // path to /data/data/yourapp/app_imageDir 
    return new Target() { 
     @Override 
     public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) { 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        final File myImageFile = new File(directory, imageName); // Create image file 
        FileOutputStream fos = null; 
        try { 
         fos = new FileOutputStream(myImageFile); 
         bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } finally { 
         try { 
          fos.close(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
        Log.i("image", "image saved to >>>" + myImageFile.getAbsolutePath()); 

       } 
      }).start(); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
     } 
     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 
      if (placeHolderDrawable != null) {} 
     } 
    }; 
} 

пожалуйста, помогите. Благодарю.

+0

вы видите какие-либо ошибки в лог-файл? Вы подтвердили, что значение «url» в вашем цикле соответствует ожиданиям? –

+0

да, я уверен, что значение URL правильное. В файле журнала нет ошибок, но изображение все равно не будет загружено. –

+0

Я пробовал сделать Целевой класс, но он все еще не загружается. он создает каталоги, но не загружает фотографии. –

ответ

0

Targets are held in WeakReferences.

Вы должны содержать ссылку на целевые задачи, которые вы хотите сохранить, чтобы предотвратить их от мусора.

Может быть, ваш код будет выглядеть примерно так:

final class MyLoader { 
    final ArrayList<Target> targets = new ArrayList<>(20); 
    void load(...) { 
    for(...) { 
     Target target = picassoImageTarget(...); 
     targets.add(target); 
     picasso.load(...).into(target); // TODO: Maybe remove from list when complete. 
    } 
    } 
} 
+0

он работает! благодаря! –

Смежные вопросы