2016-06-30 14 views
1

ピカソを実装していますので、画像をダウンロードしてsdカートに保存することができます。ターゲットに一度移動すると4回移動します。ピカソ/ターゲット

私はforループがあります:私はコメントし

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) { 
      } 
     } 
    }; 

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

をしかし、私は一度だけターゲットに取得し、forループの最後の1、

ターゲットコードあなたがコメントを外すことができないようにしたい場合は、同じかどうかで同じことをするからです。

私はそれについてalredyの検索を持っていますが、私はこの問題の答えを見つけることができませんでした。すべてのURLはOKです!

私はこれを3日間行っており、それは同じままです。

はいlistaProdutos.size()= 4; とすべてのURLは大丈夫です!

質問が分かりませんでしたら、どうぞ。

+0

ピカソ自体が重複したターゲットでリクエストをフィルタリングすると思います。 –

+0

@VladMatvienkoしかしこの場合は4ですが、ユーザーが5または6を追加したいと思うかもしれませんが、どれくらいの数があるか分かりません。 –

+1

新しいターゲットを作成する必要がありますサイクル内。このようにして、必要なだけ作成します。 –

答えて

2

次のコードを使用しないのはなぜ?ここでターゲットは使用されていないので、ターゲットは取得されません。

私はあなたのコードを少しでも最適化する自由を取っていました。私はコードをテストせずにこれを行ったが、問題なく動作するはずである。

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、私のためにこの作品、あなたはいくつかのコードを変更する必要があります、 )私の場合、私はそれらを必要としませんでしたが、そのまま残しておいて、 "キャッチ"はそのようには動作しませんでした、plsはキャッチ(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

このクラスにStringを送信するにはどうすればよいですか? –

+0

@FranciscoMelicias、varivelとは何ですか? –

+0

私は言いたい文字列、私は自分の質問を編集しました –

関連する問題