使用Picasso下载图像

时间:2016-06-07 18:36:21

标签: android picasso

我有一个图片网址列表。我想使用Picasso将这些图像下载到Android上的本地存储。我正在使用以下方法(使用自定义目标)。但是,我没有看到所有图像下载。

public void downloadAllMapImages(List<ProjectMapModel> models) {
    List<Target> targetList=Lists.newArrayList();
    for(ProjectMapModel model:models){
        for (Map.Entry<Integer, String> entry : model.getMaps().entrySet()) {
            String url=entry.getValue();
            Target target=mapImageTarget(model.getProjectId(),entry.getKey());
            targetList.add(target);
            Picasso.with(this)
                    .load(url)
                    .into(target);
        }
    }
    if(!isImageDownloadSuccessful)
        showDownloadMapImageDataError();

    //whatever images were downloaded, we need to write them to database
    listDetailPresenter.onImageDownloadingSuccessful(projectMapOutputModels);
}

  private Target mapImageTarget(final int projectId, final int mapType) {
    //create the file name
    final File file = new File(this.getExternalFilesDir(null) + File.separator + projectId+"_"+ mapType + ".jpg");
    final String filePath=file.getAbsolutePath();
    return new Target() {
        @Override
        public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
            // loading of the bitmap was a success
            // write the image to file
            new Thread(new Runnable() {
                @Override
                public void run() {
                    OutputStream outputStream = null;
                    try {
                        outputStream = new FileOutputStream(file);
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
                    } catch (IOException e) {
                        Log.e(DashboardActivity.class.getName(), e.toString());
                        isImageDownloadSuccessful=false;
                    } finally {
                        try {
                            outputStream.close();
                            Log.i(DashboardActivity.class.getName(), "image saved");
                        } catch (IOException e) {
                            Log.e(DashboardActivity.class.getName(), e.toString());
                            isImageDownloadSuccessful=false;
                        }
                    }
                    projectMapOutputModels.add(new ProjectMapOutputData(projectId,filePath,mapType));
                    Log.i("image", "image saved to >>>" + filePath);

                }
            }).start();

            //notify presenter that this image has been download and the path can be sent to presenter
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            // loading of the bitmap failed
            // TODO show error message toast. dont write file path to database. continue with next image
            isImageDownloadSuccessful=false;
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {

        }
    };

}

我错过了什么吗?对此的任何帮助都非常感谢!

0 个答案:

没有答案