1.主Activity
1 public class MainActivity extends Activity {
2
3private ListView listView;
4private ArrayList<Person> persons;
5private ListAdapter adapter;
6private Handler handler=null;
7//xml文件的网络地址
8final String path="http://192.168.5.10:8080/FileServer/person.xml";
9@SuppressLint("HandlerLeak")
10protected void onCreate(Bundle savedInstanceState) {
11super.onCreate(savedInstanceState);
12setContentView(R.layout.main);
13
14listView=(ListView) super.findViewById(R.id.listview);
15//cache=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/cache");
16
17//开一条子线程加载网络数据
18Runnable runnable=new Runnable()
19{
20public void run()
21{
22try
23{
24Thread.sleep(2000);
25//xmlwebData解析网络中xml中的数据
26persons=XmlwebData.getData(path);
27//发送消息,并把persons结合对象传递过去
28handler.sendMessage(handler.obtainMessage(0, persons));
29}
30catch (InterruptedException e)
31{
32e.printStackTrace();
33}
34}
35};
36
37try
38{
39//开启线程
40new Thread(runnable).start();
41//handler与线程之间的通信及数据处理
42handler=new Handler()
43{
44public void handleMessage(Message msg)
45{
46if(msg.what==0)
47{
48//msg.obj是获取handler发送信息传来的数据
49@SuppressWarnings("unchecked")
50ArrayList<Person> person=(ArrayList<Person>) msg.obj;
51//给ListView绑定数据
52BinderListData(person);
53}
54}
55};
56}
57catch (Exception e)
58{
59e.printStackTrace();
60}
61}
62
63//绑定数据
64public void BinderListData(ArrayList<Person> person)
65{
66//创建adapter对象
67adapter=new ListViewAdapter(R.layout.item,this,person);
68//将Adapter绑定到listview中
69listView.setAdapter(adapter);
70}
71
72 }
2.从网络中获取xml文件并解析数据
1 public class XmlwebData
2 {
4private static ArrayList<Person> persons=null; 6public static ArrayList<Person> getData(final String path)
7{
8try
9{
10URL url=new URL(path);
11Person person=null;
13HttpURLConnection conn=(HttpURLConnection) url.openConnection();
14conn.setRequestMethod("GET");
15conn.setConnectTimeout(5000);
16if(conn.getResponseCode()==200)
17{
18InputStream inputstream=conn.getInputStream();
21XmlPullParser xml=Xml.newPullParser();
22xml.setInput(inputstream, "UTF-8");
23int event=xml.getEventType();
24
25while(event!=XmlPullParser.END_DOCUMENT)
26{
27switch (event)
28{
29//开始解析文档
30case XmlPullParser.START_DOCUMENT:
31persons=new ArrayList<Person>();
32break;
33case XmlPullParser.START_TAG:
34
35String value=xml.getName();
36if(value.equals("person"))
37{//person对象的初始化必须在这里初始化不然可能出现为null的现象
38person=new Person();
39//获取属性值
40person.setId(new Integer(xml.getAttributeValue(0)));
41}
42else if(value.equals("name"))
43{
44person.setName(xml.nextText());
45}
46else if(value.equals("sex"))
47{
48person.setSex(xml.nextText());
49}
50else if(value.equals("age"))
51{
52person.setAge(new Integer(xml.nextText()));
53}
54else if(value.equals("path"))
55{
56person.setPath(xml.nextText());
57}
58break;
59case XmlPullParser.END_TAG:
60if(xml.getName().equals("person"))
61{
62persons.add(person);
63System.out.println(person.getName());;
64person=null;
65}
66break;
67}
68//解析下一个对象
69event=xml.next();
70}
71return persons;
72}
73}
74catch (Exception e)
75{
76e.printStackTrace();
77}
78
79
80return null;
81
82}
83
84 }
3.Person对象类
1 public class Person
2 {
3private int id;
4private String name;
5private String sex;
6private String path;
7public String getPath() {
8return path;
9}
10public void setPath(String path) {
11this.path = path;
12}
13private int age;
14public int getId() {
15return id;
16}
17public void setId(int id) {
18this.id = id;
19}
20public String getName() {
21return name;
22}
23public void setName(String name) {
24this.name = name;
25}
26public String getSex() {
27return sex;
28}
29public void setSex(String sex) {
30this.sex = sex;
31}
32public int getAge() {
33return age;
34}
35public void setAge(int age) {
36this.age = age;
37}
38public Person(){
39
40}
41 }
4.Adapter数据适配器类
1 public class ListViewAdapter extends BaseAdapter implements ListAdapter
2 {
3
4private ArrayList<Person> data;
5private int id;
6private Context context;
7private LayoutInflater inflater;
8public ListViewAdapter(int item, MainActivity mainActivity,ArrayList<Person> data)
9{
10this.data=data;
11this.context=mainActivity;
12this.id=item;
13inflater=LayoutInflater.from(context);
14}
15
16@Override
17public int getCount()
18{
19return data.size();
20}
21
22@Override
23public Object getItem(int position)
24{
25return data.get(position);
26}
27
28@Override
29public long getItemId(int position)
30{
31return position;
32}
33
34@Override
35public View getView(int position, View view, ViewGroup arg2)
36{
37TextView name=null;
38TextView sex=null;
39TextView age=null;
40ImageView img=null;
41if(view==null)
42{
43view=inflater.inflate(id, null);
44name=(TextView) view.findViewById(R.id.PersonName);
45sex=(TextView) view.findViewById(R.id.PersonSex);
46age=(TextView) view.findViewById(R.id.PersonAge);
47img=(ImageView) view.findViewById(R.id.Personimage);
48//保存view对象到ObjectClass类中
49view.setTag(new ObjectClass(name,sex,age,img));
50}
51else
52{
53//得到保存的对象
54ObjectClass objectclass=(ObjectClass) view.getTag();
55name=objectclass.name;
56sex=objectclass.sex;
57age=objectclass.age;
58img=objectclass.img;
59}
60
61Person person=(Person) data.get(position);
62//帮数据绑定到控件上
63name.setText(person.getName().toString());
64sex.setText("性别:"+person.getSex().toString());
65age.setText("年龄:"+String.valueOf(person.getAge()));
66//加载图片资源
67LoadImage(img,person.getPath());
68return view;
69
70}
71
72private void LoadImage(ImageView img, String path)
73{
74//异步加载图片资源
75AsyncTaskImageLoad async=new AsyncTaskImageLoad(img);
76//执行异步加载,并把图片的路径传送过去
77async.execute(path);
78
79}
80
81private final class ObjectClass
82{
83TextView name=null;
84TextView sex=null;
85TextView age=null;
86ImageView img=null;
87public ObjectClass(TextView name, TextView sex, TextView age,ImageView img)
88{
89this.name=name;
90this.sex=sex;
91this.age=age;
92this.img=img;
93}
94}
95
97 }
5.异步加载图片类
1 public class AsyncTaskImageLoad extends AsyncTask<String, Integer, Bitmap> {
2
3private ImageView Image=null;
4
5public AsyncTaskImageLoad(ImageView img)
6{
7Image=img;
8}
9//运行在子线程中
10protected Bitmap doInBackground(String... params) {
11try
12{
13URL url=new URL(params[0]);
14HttpURLConnection conn=(HttpURLConnection) url.openConnection();
15conn.setRequestMethod("POST");
16conn.setConnectTimeout(5000);
17if(conn.getResponseCode()==200)
18{
19InputStream input=conn.getInputStream();
20Bitmap map=BitmapFactory.decodeStream(input);
21return map;
22}
23} catch (Exception e)
24{
25e.printStackTrace();
26}
27return null;
28}
29
30protected void onPostExecute(Bitmap result)
31{
32if(Image!=null && result!=null)
33{
34Image.setImageBitmap(result);
35}
36
37super.onPostExecute(result);
38}
39 }
6.网络中的person.xml文件内容为
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Persons>
3<person id="1">
4<name>张三</name>
5<sex>男</sex>
6<age>25</age>
7<path>http://192.168.5.10:8080/FileServer/chengjisihan.jpg</path>
8</person>
9<person id="2">
10<name>李斯</name>
11<sex>男</sex>
12<age>78</age>
13<path>http://192.168.5.10:8080/FileServer/laozi.jpg</path>
14</person>
15<person id="3">
16<name>王五</name>
17<sex>男</sex>
18<age>22</age>
19<path>http://192.168.5.10:8080/FileServer/lilongji.jpg</path>
20</person>
21<person id="4">
22<name>庞聪</name>
23<sex>男</sex>
24<age>31</age>
25<path>http://192.168.5.10:8080/FileServer/lishimin.jpg</path>
26</person>
27<person id="5">
28<name>孙膑</name>
29<sex>男</sex>
30<age>48</age>
31<path>http://192.168.5.10:8080/FileServer/lisi.jpg</path>
32</person>
33<person id="6">
34<name>孙武</name>
35<sex>男</sex>
36<age>58</age>
37<path>http://192.168.5.10:8080/FileServer/liyuan.jpg</path>
38</person>
39
40<person id="7">
41<name>成吉思汗</name>
42<sex>男</sex>
43<age>40</age>
44<path>http://192.168.5.10:8080/FileServer/sunbiin.jpg</path>
45</person>
46
47<person id="8">
48<name>李渊</name>
49<sex>男</sex>
50<age>36</age>
51<path>http://192.168.5.10:8080/FileServer/sunwu.jpg</path>
52</person>
53
54<person id="9">
55<name>李隆基</name>
56<sex>男</sex>
57<age>32</age>
58<path>http://192.168.5.10:8080/FileServer/wangwu.jpg</path>
59</person>
60<person id="10">
61<name>武则天</name>
62<sex>女</sex>
63<age>55</age>
64<path>http://192.168.5.10:8080/FileServer/wuzetian.jpg</path>
65</person>
66 </Persons>