基于URL更新ImageView

时间:2016-03-14 05:09:25

标签: android android-imageview picasso

我花了很多时间来讨论关于这个主题的多个不同主题,但我还没有找到一个适合我的代码的答案(Android SDK 23,2016)。很多答案都被弃用了,而其他的答案却没有像预期的那样发挥作用,我想知道我是否可以得到一个可靠的答案:

我试图在Serebii的程序中包含一个Pokemon精灵(静态图像)。 nums是一个变量,表示口袋妖怪的dex号码(这个号码正确,我保证)。这个代码在主UI线程中运行,我知道这是不赞成的,但是现在我正在尝试加载图像,然后降低应用程序的平滑度。 我本身并不需要Bitmap,但我需要ImageView更新并显示URL提供的图像。我该怎么办?

URL url = null;
try {
     url = new URL("http://www.serebii.net/xy/pokemon/" + nums + ".png");
} catch (MalformedURLException e) {
  e.printStackTrace();
}
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
mImageView.setImageBitmap(bmp);

4 个答案:

答案 0 :(得分:1)

只需使用Picasso库,它就可以完成所有图像加载。您只需要正确提供图像的网址。

String url = "http://www.serebii.net/xy/pokemon/" + nums + ".png";

Picasso.with(yourContext)
    .load(url)
    .into(mImageView);

答案 1 :(得分:0)

您可以尝试将毕加索用作:

Picasso.with(context)
          .load(url)
          .into(imageview);

或使用Universal Image loader作为:

 ImageLoader imageLoader = new  ImageLoader(context);
 imageLoader.displayImage(imageUri, imageView);

答案 2 :(得分:0)

使用 Piassco 库。Library link

Bitmap

上设置ImageView
Picasso.with(getContext()).load("your url").into(new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            //do what ever you want with your bitmap 
          imgView.setImageBitmap(loadedImage);///imgView is use to set the image in it
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {

        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {

        }
    });

另一种毕加索的方法: -

Picasso.with(this)
        .load("your_image_url")
        .placeholder(R.drawable.no_image)
        .error(android.R.drawable.stat_notify_error)
        .networkPolicy(NetworkPolicy.OFFLINE)//user this for offline support
        .into(YOUR_IMAEGVIEW);

您也可以使用通用图片加载器。这是链接Universal image loader

ImageLoader imageLoader = ImageLoader.getInstance(); // Get singleton instance
            ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(getActivity()));
            imageLoader = com.nostra13.universalimageloader.core.ImageLoader.getInstance();
              DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.YOUR_DRAWABLE)
                    .showImageForEmptyUri(R.drawable.YOUR_DRAWABLE)
                    .showImageOnFail(R.drawable.YOUR_DRAWABLE)
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .considerExifParams(true)
                    .build();

imageLoader.displayImage("your_image_url", YOUR_IMAGEVIEW, null);

答案 3 :(得分:0)

您可以使用Picasso库来加载图片 a)将Gradle添加到您的项目中。

compile 'com.squareup.picasso:picasso:2.5.2'

b)用法

Picasso.with(context).load("http://www.serebii.net/xy/pokemon/" + nums + ".png").into(imageView);

还有另外一个库,你可以使用喜欢 Fresco来自Facebook,Universal Image loader