如何在Android中显示来自URL的图像

时间:2016-08-31 11:23:42

标签: android image url https

我使用此代码显示来自网址的图片,但图片存储在设备中这是问题,因为我只想在用户连接到互联网时显示此图片

ImageView imageView=(ImageView) findViewById(R.id.imageView3);
image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bitmap);

如何在Android中显示来自网址的图片?

9 个答案:

答案 0 :(得分:2)

compile "com.squareup.picasso:picasso:2.4.0"

使用此库加载图像。

Picasso.with(context)
       .load(url)
       .placeholder(R.drawable.placeholder) //optional
       .resize(imgWidth, imgHeight)         //optional  
       .centerCrop()                        //optional   
       .into(image);                        //Your image view object.

答案 1 :(得分:2)

尝试此解决方案..

image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(image);

它会帮助你。

答案 2 :(得分:0)

使用以下代码检查互联网连接

            ConnectivityManager connectivity = (ConnectivityManager) _Context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        if (connectivity != null) {
            NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
            boolean isConnected = activeNetwork != null &&
                    activeNetwork.isConnectedOrConnecting();
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        available = true;
                    }
                }
            }
        }
        if (available == false) {
            NetworkInfo wiMax = connectivity.getNetworkInfo(6);
            if (wiMax != null && wiMax.isConnected()) {
                available = true;
            }
        }

然后使用下载图像

class DownloadTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
String image_name, studentName;
TextDrawable drawable;

public DownloadTask(ImageView bmImage, String file_name) {
    this.bmImage = bmImage;
    this.image_name = file_name;
}

protected Bitmap doInBackground(String... urls) {
    InputStream input = new java.net.URL(image_name).openStream();
    if(input.available()!=0) {
        return BitmapFactory.decodeStream(input);
    }
    return null;
}

protected void onPostExecute(Bitmap result) {
    try {
        if(result == null)
            bmImage.setImageDrawable(drawable);
        else
        bmImage.setImageBitmap(result);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 3 :(得分:0)

我也使用下面的代码解决了同样的问题。

Picasso.with(context).load(uri).networkPolicy(NetworkPolicy.NO_CACHE)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .placeholder(R.drawable.bv_logo_default)
        .into(viewImage_imageView);

答案 4 :(得分:0)

尝试这一点也可以根据你修复尺寸..或者看看使用通用装载程序调整大小

<ImageView
android:id="@id/ivImage"
android:layout_width="150dp"
android:layout_height="150dp"
android:adjustViewBounds="true"

android:scaleType="fitCenter" />

使用了Android Universal Image-Loader

  

声明

    private ImageLoader imageLoader1;
  

创建

 imageLoader1 = ImageLoader.getInstance();

 imageLoader1.init(ImageLoaderConfiguration.createDefault(youractivity.this));
  

no_image这里是一个可在Cache中没有任何图像加载的可绘制图像

   DisplayImageOptions
            options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .showImageOnLoading(R.drawable.no_image) // resource or drawable
            .showImageForEmptyUri(R.drawable.no_image) // resource or drawable
            .showImageOnFail(R.drawable.no_image)
            .considerExifParams(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();

    imageLoader1.displayImage(yourpathURl.replace(" ", "%20"), ivImage, options);

还添加gradle依赖项...下载最新的通用装载程序罐

The download link of jar

  compile files('libs/universal-image-loader-1.9.5-with-sources.jar')

您也可以使用Piccaso并同时滑行

答案 5 :(得分:0)

您可以使用Picasso库将图像加载到imageView中。它易于使用。

在应用级build.gradle文件中添加依赖项

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

从像这样的网址加载图片

Picasso.with(this).load(url).into(imageView);

了解有关毕加索enter link description here

的更多信息

答案 6 :(得分:0)

Glide图书馆比Picasso好,我建议你使用Glide

在依赖项部分的Build.gradle文件中执行此操作,添加以下代码:

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

然后在你想要显示Image的Activity中使用onCreate方法中的代码:

String myUrl = "https://github.com/bumptech/glide/raw/master/static/glide_logo.png";

ImageView imageView = (ImageView)findViewById(R.id.yourImageView);

Glide.with(getApplicationContext())
     .load(myUrl)
     .into(imageView);

答案 7 :(得分:0)

Glide.with(context).load(uri).asBitmap().placeholder(R.drawable.yourimage).error(R.drawable.yourimage).into(yourview); 

除了上面的答案,如果图片网址返回null,您可以将默认图片加载到视图中,如上所示。

答案 8 :(得分:0)

我最终为科特林得到了这样的东西。

//download
val result = lifecycleScope.async(Dispatchers.IO){
    try {
        val url = URL("url")
        return@async BitmapFactory.decodeStream(url.openConnection().getInputStream())
    } catch (e: IOException){
        println("Error")
    } catch (e: UnknownServiceException){
        println("Error2")
    } catch (e: MalformedURLException){
        println("Error3")
    }
}

lifecycleScope.launch {
    val bitmap = result.await() as Bitmap
    val imageView: ImageView = findViewById(R.id.post_image)
    imageView.setImageBitmap(bitmap)  
}