2016-06-30 19 views
1

所以我實現了畢加索,所以我可以下載圖像並將它們保存在SD卡車上,所以當我想要我可以在程序中使用它們。只需去一次目標,它應該去4次。畢加索/目標

我有一個for循環:

for (int i = 0; i < listaProdutos.size(); i++) { 
       caminho =listaProdutos.get(i).getImagem(); 
       Picasso.with(getApplicationContext()).load("URL"+listaProdutos.get(i).getImagem()).into(target); 
      } 

但我只是進入目標一旦及其對循環中的最後一個,

目標代碼:

private Target target = new Target() { 
     @Override 
     public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) { 
      //new Thread(new Runnable() { 
       //@Override 
       //public void run() { 
      /* 
        File file = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(),caminho); 
        try 
        { 
         file.createNewFile(); 
         FileOutputStream ostream = new FileOutputStream(file); 
         bitmap.compress(Bitmap.CompressFormat.JPEG, 75, ostream); 
         ostream.close(); 
        } 
        catch (Exception e) 
        { 
         e.printStackTrace(); 
        }*/ 
        try { 
         verifyStoragePermissions(AtividadePrincipal.this); 
         String root = Environment.getExternalStorageDirectory().toString(); 
         File myDir = new File(root + "/imagensDaApp"); 
         myDir = new File(myDir, caminho); 
         if (!myDir.exists()) { 
          myDir.getParentFile().mkdirs(); 
         //myDir.createNewFile(); 
         } 
         FileOutputStream out = null; 
         out = new FileOutputStream(myDir); 
         bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 

         out.flush(); 
         out.close(); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       //} 
      //}).start(); 
     } 
     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
     } 

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

我評論了線程,因爲它有或沒有做同樣的事情,如果你想不能取消註釋。

我已經搜尋了它,但我無法找到任何問題的答案,所有的網址都可以!

我一直這樣做了3天,並保持不變。

YES listaProdutos.size()= 4; 和所有的網址都可以!

如果你不明白這個問題,請說。

+0

我認爲畢加索本身可以過濾具有重複目標的請求。你必須創建4個目標實例來做你想要的 –

+0

@VladMatvienko,但在這種情況下是4,但也許用戶想要添加5或6,我不知道會有多少 –

+1

你需要創建新的目標在週期內。這樣你就可以創建儘可能多的你需要的東西。 –

回答

2

爲什麼不使用下面的代碼?沒有目標在這裏使用,所以沒有目標正在獲得gc'ed

我花了一些時間自由地優化你的代碼。我沒有測試代碼就做了這個,但它應該沒有任何問題。

new Thread(new Runnable(){ 
       @Override 
       public void run(){ 

       for (int i = 0; i < listaProdutos.size(); i++) { 
           caminho =listaProdutos.get(i).getImagem(); 

           try { 
            verifyStoragePermissions(AtividadePrincipal.this); 
            String root = Environment.getExternalStorageDirectory().toString(); 
            File myDir = new File(root + "/imagensDaApp"); 
            myDir = new File(myDir, caminho); 
            if (!myDir.exists()) { 
             if(myDir.getParentFile().mkdirs()){ 
              //myDir.createNewFile(); 
              FileOutputStream out = null; 
              out = new FileOutputStream(myDir); 
              Picasso.with(getApplicationContext()).load("URL"+listaProdutos.get(i).getImagem()).get().compress(Bitmap.CompressFormat.JPEG, 90, out); 

              out.flush(); 
              out.close(); 
             } 

            } 

           } catch (FileNotFoundException e){ 
            e.printStackTrace(); 
           }catch{IOException e) { 
            e.printStackTrace(); 
           } 

          } 
       } 
      }).start(); 
+0

Tnx,這項工作對我來說,你只需要改變一些代碼,我會接受這個答案: )在我的情況下,我並不需要那些「如果」,但那可以讓留下,「catch」沒有這樣工作,請改變捕獲(FileNotFoundException e){e.printStackTrace();}} catch(IOException e){ e.printStackTrace(); }而他們我會接受:) –

+0

@FranciscoMelicias改變了它;-) – tim687

1

您可以創建一個類implementingTarget:

class MyTarget implements Target { 
     String name; 
     public MyTarget(String name) { 
      this.name = name; 
     } 
     @Override 
     public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) { 
      //new Thread(new Runnable() { 
       //@Override 
       //public void run() { 
      /* 
        File file = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(),caminho); 
        try 
        { 
         file.createNewFile(); 
         FileOutputStream ostream = new FileOutputStream(file); 
         bitmap.compress(Bitmap.CompressFormat.JPEG, 75, ostream); 
         ostream.close(); 
        } 
        catch (Exception e) 
        { 
         e.printStackTrace(); 
        }*/ 
        try { 
         verifyStoragePermissions(AtividadePrincipal.this); 
         String root = Environment.getExternalStorageDirectory().toString(); 
         File myDir = new File(root + "/imagensDaApp"); 
         myDir = new File(myDir, name); 
         if (!myDir.exists()) { 
          myDir.getParentFile().mkdirs(); 
         //myDir.createNewFile(); 
         } 
         FileOutputStream out = null; 
         out = new FileOutputStream(myDir); 
         bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 

         out.flush(); 
         out.close(); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       //} 
      //}).start(); 
     } 
     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
     } 

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

而且使用週期內:

for (int i = 0; i < listaProdutos.size(); i++) { 
       caminho =listaProdutos.get(i).getImagem(); 
       Picasso.with(getApplicationContext()).load("URL"+listaProdutos.get(i).getImagem()).into(new MyTarget(caminho)); 
      } 
+0

我如何發送字符串到這個類? –

+0

@FranciscoMelicias,什麼是varivel? –

+0

我想說的字符串,我編輯我的問題 –