【问题标题】:Using picasso to get image from url使用 picasso 从 url 获取图像
【发布时间】:2017-02-02 03:50:28
【问题描述】:

我想从 url 加载图像并将其保存在 sd 卡中的文件中,然后从文件加载并显示在图像视图中。

所以我正在尝试使用毕加索加载图像。但它没有显示在图像视图上。

这里是网址:

http://xesoftwares.co.in/contactsapi/profile_images/d34b638b93773140eb94d5f03c20237c.jpg

使用毕加索加载图像。

Picasso.with(MainActivity.this).load(url).into(profileImage);

如何从 url 下载图像。将其保存在 sd 卡中的文件中,然后从文件中加载图像以显示在图像视图中?

请帮忙。谢谢。。

【问题讨论】:

  • 您真的要保存到 SD 卡吗? Picasso 将在您想要显示图像并将其存储在应用程序缓存中时下载
  • 好的,但为什么它不起作用?@Stallion
  • 把你的相关完整代码放在具有清单权限的单行之外

标签: android image url picasso


【解决方案1】:

使用 GLIDE 库它会自动将您的图像存储到缓存中.....

   Glide.with(context).load(url).into(profileImage);

注意:- 只有在您第一次需要互联网来加载图像时。当图像在没有互联网的情况下加载时。

编辑:- 使用这个 gradle

compile 'com.github.bumptech.glide:glide:3.7.0'

输出:-

【讨论】:

  • 编译库的路径? @sushildlh
  • 毕加索工作正常...可能是您设备中的一些 OutMerroyExcepton 检查您的 LagCat 错误.....有问题我更新了输出 ....
  • 我没有得到任何异常。 @sushildlh
  • 检查你 Logcat 是否完全关心......试试这个Picasso.with(this).load(url).resize(1000, 1000).into(profileImage);
  • 能不能得到毕加索保存的文件路径?我想将文件名存储在数据库中。 @sushildlh
【解决方案2】:

添加:

<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" /> 

在你的清单文件中,否则无法下载源代码。

如果你想将它保存在 sd 卡中,你需要另一个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

为了保存它。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

如果你想在将来得到那个文件。

接下来如果要保存到外部目录,可以试试这个:

    public void setUpDirectory(String folderName,String source){

        File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+folderName);

        if(!directory.exists() && !directory.isDirectory()) {
            directory.mkdirs();
        }

        URL imageurl = new URL(source); 
        Bitmap bitmap = BitmapFactory.decodeStream(imageurl.openConnection().getInputStream());
        saveFile(directory,bitmap);
    }


private void saveFile(File fileName,Bitmap bmp){


FileOutputStream outputStream = null;
try {
    outputStream = new FileOutputStream(fileName);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, outputStream ); // 100 will be  ignored
} catch (Exception e) {
    e.printStackTrace();
} 
finally {
    try {
        if outputStream != null) {
            outputStream .close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}


}

【讨论】:

    【解决方案3】:

    要将其保存到 sd 卡中,您必须在清单中声明使用从 sd 卡写入读取的权限,还要求用户为 android 5.0+ 提供这些权限。这一切都清楚地记录在android开发者官方网站上。 将 MainActivity.class 更改为 getApplicationContext()

    【讨论】:

    • 我已经声明了权限。问题是它没有加载。@rei koleci
    • 你做了我建议的改变吗?
    • 毕加索也保存在缓存中。你不需要滑行。
    【解决方案4】:

    如果您在 xml 中将图像作为 ImageView 的背景,请将其删除。

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2016-10-02
      • 2017-05-13
      • 2019-08-20
      • 2016-10-31
      • 2014-12-04
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      相关资源
      最近更新 更多