Andriod 读取网络图片实例代码解析

时间:2022-03-26 08:59:37

android手机上,我们常用imageview显示图片,我们本章获取网络图片并显示在imageview中。

一、设计界面

  1、布局文件

  打开res/layout/activity_main.xml文件。

  输入以下代码:

?
1
2
3
4
5
6
7
8
9
10
<?xml version="." encoding="utf-"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<imageview
android:id="@+id/imagephoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</linearlayout>

二、程序文件

  打开“src/com.genwoxue.networkphoto/mainactivity.java”文件。

  然后输入以下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.genwoxue.networkphoto;
import java.io.ioexception;
import java.io.inputstream;
import java.net.httpurlconnection;
import java.net.malformedurlexception;
import java.net.url;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.os.asynctask;
import android.os.bundle;
import android.widget.imageview;
public class mainactivity extends activity {
private imageview imview;
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
imview = (imageview) findviewbyid(r.id.imagephoto);
string imageurl = "http://img.baidu.com/img/image/ilogob.gif";
new networkphoto().execute(imageurl);
}
/* 四个步骤:
* ()onpreexecute(),执行预处理,它运行于ui线程,
* 可以为后台任务做一些准备工作,比如绘制一个进度条控件。
* ()doinbackground(params...),后台进程执行的具体计算在这里实现,
* doinbackground(params...)是asynctask的关键,此方法必须重载。
* 在这个方法内可以使用 publishprogress(progress...)改变当前的进度值。
* ()onprogressupdate(progress...),运行于ui线程。如果
* 在doinbackground(params...) 中使用了publishprogress(progress...),就会
* 触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
* ()onpostexecute(result),运行于ui线程,可以对后台任务的结果做出处理,结果
* 就是doinbackground(params...)的返回值。此方法也要经常重载,如果result为
* null表明后台任务没有完成(被取消或者出现异常)。 *
*/
//本案例我们仅使用了()和()
class networkphoto extends asynctask<string, integer, bitmap> {
public networkphoto() {
}
//doinbackground(params...),后台进程执行的具体计算在这里实现,是asynctask的关键,此方法必须重载。
@override
protected bitmap doinbackground(string... urls) {
url url = null;
bitmap bitmap = null;
httpurlconnection conn=null;
inputstream is=null;
try {
url = new url(urls[]);
} catch (malformedurlexception e) {
e.printstacktrace();
}
try {
conn = (httpurlconnection) url.openconnection();
conn.setdoinput(true);
conn.connect();
is = conn.getinputstream();
bitmap = bitmapfactory.decodestream(is);
is.close();
} catch (ioexception e) {
e.printstacktrace();
} finally {
if(conn!=null){
conn.disconnect();
conn=null;
}
if(is!=null) {
try {
is.close();
} catch (ioexception e) {
e.printstacktrace();
}
is=null;
}
}
return bitmap;
}
//onpostexecute(result),运行于ui线程,可以对后台任务的结果做出处理,结果
//就是doinbackground(params...)的返回值。
@override
protected void onpostexecute(bitmap bitmap) {
// 返回结果bitmap显示在imageview控件
imview.setimagebitmap(bitmap);
}
}
}

三、配置文件

  打开“androidmanifest.xml”文件。

  然后输入以下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="." encoding="utf-"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.genwoxue.networkphoto"
android:versioncode=""
android:versionname="." >
<uses-sdk
android:minsdkversion=""
android:targetsdkversion="" />
<uses-permission android:name="android.permission.internet" />
<application
android:allowbackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/apptheme" >
<activity
android:name="com.genwoxue.networkphoto.mainactivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.main" />
<category android:name="android.intent.category.launcher" />
</intent-filter>
</activity>
</application>
</manifest>

注意:需要在androidmanifest.xml文件中添加权限:

?
1
<uses-permission android:name="android.permission.internet" />