当前位置: 首页 > 知识库问答 >
问题:

使用毕加索下载和保存图像

曾丰茂
2023-03-14

4.使用自定义适配器在ListView中显示图像。

我只是对步骤1和2有问题。我可以从服务器获取新闻,并在我的ListView中显示它们

并通过在我的适配器中添加以下代码显示缓存中的图像:

Picasso.with(context).load(image[position]).into(iv);
@Override
protected void onPostExecute(Void result) {
   SaveImages();
   pDialog.dismiss();
   super.onPostExecute(result);
}

String fileName = null;

public void SaveImages() {
    for(int i = 0; i < image.length; i++) {
        Picasso.with(this).load(image[i]).into(target);
        fileName = "image-" + i + ".jpg";
    }
}

Target target = new Target() {

    @Override
    public void onPrepareLoad(Drawable arg0) {
    }

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
        File file = new File(Environment.getExternalStorageDirectory().getPath() +"/" + fileName);
         try {
             file.createNewFile();
             FileOutputStream ostream = new FileOutputStream(file);
             bitmap.compress(CompressFormat.JPEG, 75, ostream);
             ostream.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
    }

    @Override
    public void onBitmapFailed(Drawable arg0) {
    }
};

共有1个答案

林弘文
2023-03-14

尝试将target target定义放在调用picasso.with(this).load(image[i]).into(target);之前

附言。使用下面的代码和我保存图像非常好。不管怎样,谢谢。

我的代码

        final String fileName = mDataset.get(i).getAid() + ".jpg";
        Target target = new Target() {

            @Override
            public void onPrepareLoad(Drawable arg0) {
                return;
            }

            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom arg1) {

                try {
                    File file = null;

                    // judge "imgs/.nomedia"'s existance to judge whether path available
                    if(LightCache.testFileExist(GlobalConfig.getFirstStoragePath()
                            + "imgs" + File.separator +".nomedia") == true)
                        file = new File(GlobalConfig.getFirstStoragePath()
                                + "imgs" + File.separator + fileName);

                    else file = new File(GlobalConfig.getSecondStoragePath()
                            + "imgs" + File.separator + fileName);

                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
                    ostream.close();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onBitmapFailed(Drawable arg0) {
                return;
            }
        };

        Picasso.with(GlobalConfig.getContext())
                .load(Wenku8API.getCoverURL(mDataset.get(i).getAid()))
                .into(target);
 类似资料:
  • 正如你可以看到的使用链接,毕加索只有3个选项加载一个图像。我的问题是,如果您有一个从API的JSON响应解析的base64字符串,那么如何加载图像?

  • 问题内容: 我的API具有针对每个HTTP请求的某种验证机制。端点之一具有使用HTTP post方法加载图像的功能。发布请求主体将包含一个从服务器端验证的JSON对象。 为此,我需要在http post请求正文中包含这样的JSON。 我该如何用毕加索做到这一点? 问题答案: 我从杰克逊·成加莱先生的暗示中得到了解决方案。 创建一个Okhttp请求拦截器 创建一个Okhttp客户端,添加此拦截器 使

  • 从internet加载文本数据并链接到图像。我无法理解如何在listview中加载图像。阅读后,它需要使用毕加索或通用图像加载器,但不明白如何使用。请更正我的代码 }

  • 我在应用程序中使用了毕加索,但我面临一个问题。我在Listview中显示用户配置文件图像,如果图像不存在,我想在ImageView中显示用户名的首字母缩写。我可以显示个人资料图像,如果存在,但为了显示首字母,我如何知道用户没有图像。?

  • 问题内容: 我想使用Picasso在列表视图中一个接一个地加载三个连续的图像。使用毕加索提供的方法可以轻松做到这一点。但是,由于这些图像在不同的时间加载,因此在图像进入时会产生闪烁效果。例如,有时图像2出现在图像1之前,而当图像1加载时会导致不自然的结结。如果可以将listview的可见性设置为不可见,直到可以显示所有图像,那将更好。但是,我找不到用于毕加索的回调方法,该方法会在加载图像时发出信号

  • 我正在使用毕加索图书馆。我知道,如果我将图片从URL加载到图像视图中,有一种回调方法。但我不想加载到imageview中。相反,我想将其另存为位图。所以我用了下面的代码 我怎样才能得到一个回调方法,知道我的图像是成功下载使用毕加索? 不要说位图对象的空检查。这会导致错误。