如何将网址中的图片放入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);”
答案 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:
的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? strong>
@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