Android SDK,从URL设置ImageView位图

时间:2016-04-13 08:33:12

标签: java android bitmap

如何将网址中的图片放入ImageView

我不想使用任何图书馆,而是坚持旧的方式,我喜欢它。别评判我就像我之前所说的那样,但是奇怪的是它不再是

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView damnit = (ImageView)findViewById(R.id.imageview);
            try {
                URL url = new URL("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png");

                InputStream in = url.openStream();
                Bitmap bitt = BitmapFactory.decodeStream(in);
                damnit.setImageBitmap(bitt);
            } catch (Exception e) {
                e.printStackTrace();
            }
}

修改<!/强>

我是个白痴,很抱歉花时间的人...我必须有一个runOnUI线程,里面有“damnit.setImageBitmap(bitt);”

5 个答案:

答案 0 :(得分:2)

您正在尝试从MainThread获取网址。这是不可能的。这是您将收到的错误:android.os.NetworkOnMainThreadException

尝试使用AsyncTask例如从网址中检索图片。

@Override
public void onCreate() {
    super.onCreate();

    ImageView damnit = (ImageView)findViewById(R.id.imageview);
    DownloadTask downloadTask = new DownloadTask(damnit);
    downloadTask.execute();
}

class DownloadTask extends AsyncTask <Void, Void, Bitmap>{
    private ImageView imageView;

    public DownloadTask(ImageView imageView) {
        this.imageView = imageView;
    }
    @Override
    protected Bitmap doInBackground(Void... params) {
        try {
            URL url = new URL("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png");
            InputStream in = url.openStream();
            return BitmapFactory.decodeStream(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        if (bitmap != null) {
            imageView.setImageBitmap(bitmap);
        }
    }
}

或使用库,例如​​Glide

如何设置Glide:

的build.gradle:

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:3.7.0'
  compile 'com.android.support:support-v4:19.1.0'
}

的onCreate:

Glide.with(this)
    .load("https://www.some-url.com/image.jpg")
    .into(imageView);

答案 1 :(得分:1)

使用Glide Library加载图片&amp;设置为ImageView:

为什么我应该推荐Glide图书馆?

Because its very fast & consumes less memory

Glide是一款快速高效的Android开源媒体管理和图像加载框架,它将媒体解码,内存和磁盘缓存以及资源池包装成一个简单易用的界面。

如何设置Glide:

将Glide库设置为项目的不同方法

1.您可以从GitHub's releases page下载jar。

或者

2.use Gradle - &gt; build.gradle(模块:app)

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:3.7.0'
  compile 'com.android.support:support-v4:19.1.0'
}

或者

3.使用Maven

<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>3.7.0</version>
</dependency>
<dependency>
  <groupId>com.google.android</groupId>
  <artifactId>support-v4</artifactId>
  <version>r7</version>
</dependency>

你如何使用Glide?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView damnit = (ImageView)findViewById(R.id.imageview);

    Glide.with(this).load("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png").into(damnit);

    }

快乐编码:)

答案 2 :(得分:0)

您可以使用图片库轻松完成此操作。试试Picasso它是一个开源库,用于从网上下载和缓存图像,它也很容易使用。

只需在gradle文件中的dependancies部分添加以下行:

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

然后,开始像这样使用它:

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

重要提示:避免将空网址传递给它,因为它会引发异常。

答案 3 :(得分:0)

您可以使用UrlImageViewHelper库。 得到它 - http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=com.koushikdutta.urlimageviewhelper&a=urlimageviewhelper&v=LATEST

并构建一个方法并在任何地方使用它 -

public void setPicture(Context context, String url, ImageView imageView, int placeholder) {
    UrlImageViewHelper.setUrlDrawable(imageView, url, placeholder);
}

答案 4 :(得分:0)

我认为你应该使用Universal Image Loader。这是很棒的图书馆。访问: https://github.com/nostra13/Android-Universal-Image-Loader