首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只要去一次目标,它应该去4次。毕加索/目标

只要去一次目标,它应该去4次。毕加索/目标
EN

Stack Overflow用户
提问于 2016-06-30 10:51:57
回答 2查看 54关注 0票数 1

所以我实现了毕加索,所以我可以下载图像并保存在sd购物车上,所以当我想要的时候,我可以在程序中使用它们。

我有一个for循环:

代码语言:javascript
复制
for (int i = 0; i < listaProdutos.size(); i++) {
                caminho =listaProdutos.get(i).getImagem();
                Picasso.with(getApplicationContext()).load("URL"+listaProdutos.get(i).getImagem()).into(target);
            }

但我刚进入目标一次,这是最后一次循环,

目标代码:

代码语言:javascript
复制
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) {
            }
        }
    };

我评论了这个线程,因为它可以做同样的事情,不管您是否愿意,如果您想要取消评论的话。

我已经搜索了它,但我找不到任何这个问题的答案,所有的网址都是好的!

我已经做了三天了,它一直保持不变。

YES listaProdutos.size() = 4;所有url都是ok!

如果你不明白这个问题,请说。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-30 12:14:43

为什么不使用以下代码?这里没有使用目标,所以没有目标被gc‘’ed。

我也自由地优化了您的代码。我在没有测试代码的情况下就这样做了,但是它应该没有任何问题。

代码语言:javascript
复制
    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();
票数 2
EN

Stack Overflow用户

发布于 2016-06-30 10:59:23

您可以创建一个类implementingTarget:

代码语言:javascript
复制
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) {
            }
        }
    };

并在循环中使用它:

代码语言:javascript
复制
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 ));
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38120984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档