Android 只要去目标一次,它应该去4次。毕加索/塔吉特

Android 只要去目标一次,它应该去4次。毕加索/塔吉特,android,picasso,Android,Picasso,所以我实现了毕加索,所以我可以下载图像并保存在sd cart上,这样当我需要的时候,我可以在程序中使用它们 我有一个for循环: for (int i = 0; i < listaProdutos.size(); i++) { caminho =listaProdutos.get(i).getImagem(); Picasso.with(getApplicationContext()).load("URL"+listaProd

所以我实现了毕加索,所以我可以下载图像并保存在sd cart上,这样当我需要的时候,我可以在程序中使用它们

我有一个
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);
            }
我对该线程进行了注释,因为无论是否添加,它都可以执行相同的操作,如果需要,您不能取消注释

我已经搜索过了,但是我找不到这个问题的任何答案,所有的URL都可以

我已经这样做了三天了,它保持不变

是listaProdutos.size()=4; 所有的网址都是好的


如果你不理解这个问题,请说。

你可以创建一个实现目标的类:

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 ));
            }
for(int i=0;i
为什么不使用以下代码?这里没有使用目标,因此没有目标被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();
new线程(new Runnable()){
@凌驾
公开募捐{
对于(int i=0;i
我认为毕加索自己会用重复的目标过滤请求。你必须创建4个目标实例才能完成你的任务want@VladMatvienko但在这种情况下是4,但可能用户想要添加5或6,我不知道你需要多少才能在周期内创建新的目标。这样你就可以创建你所需要的。我已经发布了d如果您希望StackOverflow帮助您,回答者也不要在代码中使用非英语名称。我如何向此类发送字符串?@FranciscoMelicias,什么是varivel?@FranciscoMelicias在类中创建一个setter,并将值保存到字段中。
something.setString(“此处为您的字符串”)
@FranciscoMelicias,或者你可以把它传递给构造函数。你需要传递你的
caminho
吗?是的,我需要它,caminho的意思是路径对不起非英语的人。nx,这对我来说很有效,你只需要修改一些代码,我会接受这个作为答案:)在我的情况下,我不需要那些“如果”,但那就让“捕获”留下吧不是那样工作的,请更改为catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}我会接受它们:)@FranciscoMelicias更改了;-)
    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();