为什么要使用Android Picasso库来下载图像?

为什么我应该通过Picasso库下载图像,而不是使用这个代码:

private Bitmap DownloadImage(String URL) { Bitmap bitmap = null; InputStream in = null; try { in = OpenHttpGETConnection(URL); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (Exception e) { Log.d("DownloadImage", e.getLocalizedMessage()); } return bitmap; } 

另一个问题:

毕加索是下载图像在用户界面或后台线程?

只为logging任何新的Android或从iOS移动到Android ……….

直到事情发生巨大变化,你绝对必须使用毕加索。 不是一个笑话。

老实说,那很简单。 好处是难以置信的。

这是很容易使用的:

 Picasso. with(State.mainContext). load(parseImageFile.getUrl()). into(null); 

你很简单:

必须在Android上进行caching和线程处理。

就这么简单。 除非你想从头开始写,否则你只能使用毕加索。

请注意, ParseImageFile本质上不起作用 – 这是完全无用的caching等。 毕加索有很好的select(比如通用图像加载程序,请查看),但现在还没有像毕加索那样工作,现在是2014年。

请注意,如果你转向超先进的东西……比毕加索更好唯一办法就是转向排雷。 但这是一个巨大的飞跃。

请注意,Android上的ListView滚动比iOS上的表格滚动更麻烦得多。 你可以说,Android +毕加索更像是iOS上的情况,所有的工作已经完成了滚动大型表视图与图像。

对于今天,毕加索是 – 简单地说 – 任何Android应用程序的核心部分。 谢天谢地,这是一行代码 – 没有设置,什么都没有。

再一次,唯一比“毕加索”更好的是如果你搬到Volley。

顺便说一句,这是关于Volley v。Picasso的一篇长篇文章,如果你需要的话…

http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/

毕加索在另一个线程下载图像,它为您pipe理:

  • 在此期间的占位符图像仍在下载
  • 调整
  • 裁剪/定心/缩放
  • caching(您不必每次都下载图片)
  • 甚至现在stream行/正常的“形象淡入”

这非常简单,下面是一个例子:

  Picasso.with(context) .load(url) .placeholder(R.drawable.placeholder) .resize(imgWidth, imgHeight) .centerCrop() .into(image); 

我总是使用毕加索图书馆的图像。
这对pipe理图像非常有用,不用担心内存问题。
当我从服务器或JSON下载图像时,我使用了

  Picasso.with(context).load("image url").fetch(); 

而且我将这个图像的url存储到数据库或其他地方。
现在我们可以在任何地方使用该图像(离线)。

 Picasso.with(context).load("image url").into(ImageView); 
 Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/fileshttp://img.dovov.com04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView, new Callback() {@ Override public void onSuccess() {}@ Override public void onError() {} }); 

您应该通过毕加索图书馆下载图像,原因如下:

  1. 您可以放置​​一个占位符,以防图片需要一些时间加载。
  2. fit() – 有时某些图像因为大小而无法在imageview中加载。 此方法将帮助您加载大图像。
  3. onSuccess() – 您可以在图像加载成功时执行一些操作。
  4. onError() – 当加载图像出现问题时,您可以执行一些操作。

您应该使用像毕加索,排球或通用图像加载器的图像加载器库,因为他们做了以下事情,您的代码不会:

  • 高效的multithreadingnetworking(当然后台线程)
  • 将多个相同的请求组合成一个networking呼叫
  • 取消待处理的请求,特别是在ListView项目回收期间
  • 磁盘和内存caching与各种过期策略
  • 将图像下采样到目标视图大小以提高性能并减less内存使用量
  • 批量UI更新以提高UI响应性(至less对于Volley和Picasso)。

顺便说一句,你绝不能在UI线程上执行networking请求,而且由于HoneyComb,Android不允许你这样做。

我知道毕加索是一个很棒的库,用于pipe理ListView和GridView中的图像,但在包括毕加索在内的所有选项中,我都使用GLIDE …

它真的pipe理下载和caching完美…(我无法让毕加索在下载完成后使用caching的图像,但Glide做到了,就像一块蛋糕)。

这里是GLIDE的Github页面:

https://github.com/bumptech/glide

问候….

如果您将使用从networking加载图像的核心方法,那么将需要更多的代码。 但是,如果我们将使用像毕加索这样的第三方库,那么我们将在几行代码中实现我们的目标。
而毕加索图书馆是迄今为止我发现的最好,最简单的图书馆。 我们只需要写下面的内容来使用picasso加载来自互联网的图像。

 Picasso.with(this) .load("YOUR IMAGE URL HERE") .placeholder(Your Drawable Resource) //this is optional the image to display while the url image is downloading .error(Your Drawable Resource) //this is also optional if some error has occurred in downloading the image this image would be displayed .into(imageView); 

但是,如果我们不使用picasso库或任何其他库,我们可能需要使用AsyncTask,这将需要更多的代码行。

来源: 毕加索Android教程

请在您的build.gradle(Module:app)添加以下依赖项

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