Android通过请求网络获取图片资源

黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述Android通过请求网络获取图片资源相关的知识,希望能为你提供帮助。
在日常的编写android软件的过程中,避免不了使用网络请求,也不可能使用单机的Android,所以本次讲的是通过Android发送网络请求请求图片的文章。
我先来总结一下网络请求的几个步骤:
1、将想要请求的图片地址转换成URL类
2、通过openConnection来建立连接
3、在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间
4、设置请求网络的类型(GET或者POST)
5、提交网络请求
6、接受返回码,通过返回码判断网络是否请求成功
注意:这里非常重要,任何网络请求必须加上网络权限  < uses-permission android:name="android.permission.INTERNET"/>
这些是在网络请求中最基本的几个步骤,在我们写的请求网络图片的代码中,还有其余的代码需要补充。
我们代码一步一步的来:
//将想要请求的图片地址转换成URL类    这个图片的地址有点长
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #3933ff } span.s1 { color: #000000 } span.s2 { color: #931a68 }URL url = new URL("https://timgsa.baidu.com/timg?image& quality=80& size=b9999_10000& sec=1524759026299& di=47e39d74fe559c7ab60318fb308ab8fa& imgtype=0& src=https://www.songbingjia.com/android/http%3A%2F%2Fimgstore.cdn.sogou.com%2Fapp%2Fa%2F100540002%2F691448.jpg");
//通过openConnection来建立连接    这里的HttpURLConnection是openConnection的返回类型
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间
//设置连接超时为5秒
connection.setConnectTimeout(5000);
//设置读取超时为5秒
connection.setReadTimeout(5000);
//设置请求网络的类型(GET或者POST)
connection.setRequestMethod("GET");
//提交网络请求
connection.connect();
//接受返回码  这里接受到的返回码是int类型的
int code = connection.getResponseCode();
//通过返回码判断网络是否请求成功
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #4e9072 } span.s1 { color: #931a68 } span.s2 { color: #000000 } span.s3 { color: #0326cc } span.Apple-tab-span { white-space: pre } 
if(code == 200){
 
//获取连接返回的数据流
 
InputStream is = connection.getInputStream();
 
//因为返回的是个图片所以通过位图的方式获取
 
Bitmap bm = BitmapFactory.decodeStream(is);
 
//设置消息
 
Message message = new Message();
 
message.what = 0;
 
message.obj = bm;
 
//通过handler发送消息
 
handler.sendMessage(message);
 
}
 

 
在Android中执行耗时操作必须在子线程中执行,所以这里我们需要一个Handler来在主线程中设置ImageView的图片
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } span.s1 { color: #0326cc } span.s2 { color: #931a68 } span.s3 { text-decoration: underline } span.Apple-tab-span { white-space: pre }【Android通过请求网络获取图片资源】Handler handler =new Handler(){
    public void handleMessage(Message msg) {
    switch (msg.what) {
//如果msg.what是0 那么保存图片显示到ImageView中
case 0:
//在上面我们发送请求的时候把接受到的图片放到了message中,所以我们这里需要判断是否是相应的数值
//才确定是否接受这个图片

Bitmap bm = (Bitmap) msg.obj;
//设置ImageView图片

imageView.setImageBitmap(bm);
break;
}
    };
};
 
如果说我们的按钮执行请求图片的时,必须在子线程中执行,否则报错;
btnButton这个是按钮
 
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; min-height: 21.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #777777 } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #4e9072 } span.s1 { color: #0326cc } span.s2 { color: #931a68 } span.s3 { color: #000000 } span.s4 { color: #91afcb } span.s5 { color: #4e9072 } span.Apple-tab-span { white-space: pre } 
btnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//创建子线程
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
//获取图片
getPic();
}
}.start();
}
});

Android通过请求网络获取图片资源

文章图片

 
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #4e9072 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } span.s1 { color: #000000 } span.Apple-tab-span { white-space: pre } p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } span.s1 { color: #3933ff } p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco } span.s1 { color: #931a68 } p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Monaco; color: #3933ff } span.s1 { color: #009193 } span.s2 { color: #4e9192 } span.s3 { color: #000000 } span.s4 { color: #932192 }















    推荐阅读