1 public class MainActivity extends Activity {
2
3 private ListView listView;
4 private ArrayList<Person> persons;
5 private ListAdapter adapter;
6 private Handler handler=null;
7 //xml文件的网络地址
8 final String path="http://192.168.5.10:8080/FileServer/person.xml";
9 @SuppressLint("HandlerLeak")
10 protected void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.main);
13
14 listView=(ListView) super.findViewById(R.id.listview);
15 //cache=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/cache");
16
17 //开一条子线程加载网络数据
18 Runnable runnable=new Runnable()
19 {
20 public void run()
21 {
22 try
23 {
24 Thread.sleep(2000);
25 //xmlwebData解析网络中xml中的数据
26 persons=XmlwebData.getData(path);
27 //发送消息,并把persons结合对象传递过去
28 handler.sendMessage(handler.obtainMessage(0, persons));
29 }
30 catch (InterruptedException e)
31 {
32 e.printStackTrace();
33 }
34 }
35 };
36
37 try
38 {
39 //开启线程
40 new Thread(runnable).start();
41 //handler与线程之间的通信及数据处理
42 handler=new Handler()
43 {
44 public void handleMessage(Message msg)
45 {
46 if(msg.what==0)
47 {
48 //msg.obj是获取handler发送信息传来的数据
49 @SuppressWarnings("unchecked")
50 ArrayList<Person> person=(ArrayList<Person>) msg.obj;
51 //给ListView绑定数据
52 BinderListData(person);
53 }
54 }
55 };
56 }
57 catch (Exception e)
58 {
59 e.printStackTrace();
60 }
61 }
62
63 //绑定数据
64 public void BinderListData(ArrayList<Person> person)
65 {
66 //创建adapter对象
67 adapter=new ListViewAdapter(R.layout.item,this,person);
68 //将Adapter绑定到listview中
69 listView.setAdapter(adapter);
70 }
71
72 }

2.从网络中获取xml文件并解析数据

 1 public class XmlwebData
2 {
4 private static ArrayList<Person> persons=null; 6 public static ArrayList<Person> getData(final String path)
7 {
8 try
9 {
10 URL url=new URL(path);
11 Person person=null;
13 HttpURLConnection conn=(HttpURLConnection) url.openConnection();
14 conn.setRequestMethod("GET");
15 conn.setConnectTimeout(5000);
16 if(conn.getResponseCode()==200)
17 {
18 InputStream inputstream=conn.getInputStream();
21 XmlPullParser xml=Xml.newPullParser();
22 xml.setInput(inputstream, "UTF-8");
23 int event=xml.getEventType();
24
25 while(event!=XmlPullParser.END_DOCUMENT)
26 {
27 switch (event)
28 {
29 //开始解析文档
30 case XmlPullParser.START_DOCUMENT:
31 persons=new ArrayList<Person>();
32 break;
33 case XmlPullParser.START_TAG:
34
35 String value=xml.getName();
36 if(value.equals("person"))
37 {//person对象的初始化必须在这里初始化不然可能出现为null的现象
38 person=new Person();
39 //获取属性值
40 person.setId(new Integer(xml.getAttributeValue(0)));
41 }
42 else if(value.equals("name"))
43 {
44 person.setName(xml.nextText());
45 }
46 else if(value.equals("sex"))
47 {
48 person.setSex(xml.nextText());
49 }
50 else if(value.equals("age"))
51 {
52 person.setAge(new Integer(xml.nextText()));
53 }
54 else if(value.equals("path"))
55 {
56 person.setPath(xml.nextText());
57 }
58 break;
59 case XmlPullParser.END_TAG:
60 if(xml.getName().equals("person"))
61 {
62 persons.add(person);
63 System.out.println(person.getName());;
64 person=null;
65 }
66 break;
67 }
68 //解析下一个对象
69 event=xml.next();
70 }
71 return persons;
72 }
73 }
74 catch (Exception e)
75 {
76 e.printStackTrace();
77 }
78
79
80 return null;
81
82 }
83
84 }

3.Person对象类

 1 public class Person
2 {
3 private int id;
4 private String name;
5 private String sex;
6 private String path;
7 public String getPath() {
8 return path;
9 }
10 public void setPath(String path) {
11 this.path = path;
12 }
13 private int age;
14 public int getId() {
15 return id;
16 }
17 public void setId(int id) {
18 this.id = id;
19 }
20 public String getName() {
21 return name;
22 }
23 public void setName(String name) {
24 this.name = name;
25 }
26 public String getSex() {
27 return sex;
28 }
29 public void setSex(String sex) {
30 this.sex = sex;
31 }
32 public int getAge() {
33 return age;
34 }
35 public void setAge(int age) {
36 this.age = age;
37 }
38 public Person(){
39
40 }
41 }

4.Adapter数据适配器类

 1 public class ListViewAdapter extends BaseAdapter implements ListAdapter
2 {
3
4 private ArrayList<Person> data;
5 private int id;
6 private Context context;
7 private LayoutInflater inflater;
8 public ListViewAdapter(int item, MainActivity mainActivity,ArrayList<Person> data)
9 {
10 this.data=data;
11 this.context=mainActivity;
12 this.id=item;
13 inflater=LayoutInflater.from(context);
14 }
15
16 @Override
17 public int getCount()
18 {
19 return data.size();
20 }
21
22 @Override
23 public Object getItem(int position)
24 {
25 return data.get(position);
26 }
27
28 @Override
29 public long getItemId(int position)
30 {
31 return position;
32 }
33
34 @Override
35 public View getView(int position, View view, ViewGroup arg2)
36 {
37 TextView name=null;
38 TextView sex=null;
39 TextView age=null;
40 ImageView img=null;
41 if(view==null)
42 {
43 view=inflater.inflate(id, null);
44 name=(TextView) view.findViewById(R.id.PersonName);
45 sex=(TextView) view.findViewById(R.id.PersonSex);
46 age=(TextView) view.findViewById(R.id.PersonAge);
47 img=(ImageView) view.findViewById(R.id.Personimage);
48 //保存view对象到ObjectClass类中
49 view.setTag(new ObjectClass(name,sex,age,img));
50 }
51 else
52 {
53 //得到保存的对象
54 ObjectClass objectclass=(ObjectClass) view.getTag();
55 name=objectclass.name;
56 sex=objectclass.sex;
57 age=objectclass.age;
58 img=objectclass.img;
59 }
60
61 Person person=(Person) data.get(position);
62 //帮数据绑定到控件上
63 name.setText(person.getName().toString());
64 sex.setText("性别:"+person.getSex().toString());
65 age.setText("年龄:"+String.valueOf(person.getAge()));
66 //加载图片资源
67 LoadImage(img,person.getPath());
68 return view;
69
70 }
71
72 private void LoadImage(ImageView img, String path)
73 {
74 //异步加载图片资源
75 AsyncTaskImageLoad async=new AsyncTaskImageLoad(img);
76 //执行异步加载,并把图片的路径传送过去
77 async.execute(path);
78
79 }
80
81 private final class ObjectClass
82 {
83 TextView name=null;
84 TextView sex=null;
85 TextView age=null;
86 ImageView img=null;
87 public ObjectClass(TextView name, TextView sex, TextView age,ImageView img)
88 {
89 this.name=name;
90 this.sex=sex;
91 this.age=age;
92 this.img=img;
93 }
94 }
95
97 }

5.异步加载图片类

 1 public class AsyncTaskImageLoad extends AsyncTask<String, Integer, Bitmap> {
2
3 private ImageView Image=null;
4
5 public AsyncTaskImageLoad(ImageView img)
6 {
7 Image=img;
8 }
9 //运行在子线程中
10 protected Bitmap doInBackground(String... params) {
11 try
12 {
13 URL url=new URL(params[0]);
14 HttpURLConnection conn=(HttpURLConnection) url.openConnection();
15 conn.setRequestMethod("POST");
16 conn.setConnectTimeout(5000);
17 if(conn.getResponseCode()==200)
18 {
19 InputStream input=conn.getInputStream();
20 Bitmap map=BitmapFactory.decodeStream(input);
21 return map;
22 }
23 } catch (Exception e)
24 {
25 e.printStackTrace();
26 }
27 return null;
28 }
29
30 protected void onPostExecute(Bitmap result)
31 {
32 if(Image!=null && result!=null)
33 {
34 Image.setImageBitmap(result);
35 }
36
37 super.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>

运行结果如下

http://www.cnblogs.com/snake-hand/p/3206655.html的更多相关文章

  1. [Swift]LeetCode353. 设计贪吃蛇游戏 $ Design Snake Game

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  2. 2020年秋游戏开发-Gluttonous Snake

    此作业要求参考https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11577 GitHub地址为https://github.com/15011 ...

  3. 吐血大奉献,打造cnblogs最新最火辣的css3模板(IE9以下请勿入内) -- 第一版

    一直自己都想给自己的博客打造一个独一无二的皮肤,但是一直没有强劲的动力去完成这件事情.后来凭借着工作上面的需求(涉及到css3),就把自己的博客当成一个最好的试验场地.从而产生了你现在所看到的这个模板 ...

  4. 已经重写,源码和文章请跳转http://www.cnblogs.com/ymnets/p/5621706.html

    文章由于写得比较仓促 已经重写,源码和文章请跳转 http://www.cnblogs.com/ymnets/p/5621706.html 系列目录 前言: 导入导出实在多例子,很多成熟的组建都分装了 ...

  5. 总结Cnblogs支持的常用Markdown语法

    一.什么是Markdown Markdown是一种可以使用普通文本编辑器编写的标记语言, Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写博客.世界上最流行的博客平台 ...

  6. [LeetCode] Design Snake Game 设计贪吃蛇游戏

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  7. http://www.cnblogs.com/kissdodog/p/4159176.html

    想要自己一个人完成app,那么后台接口也必须自己动动手.不用担心,其实很简单的,给自己信心!下面就以登录注册为例,做一个api接口 首先在mac上搭建PHP环境,下载 MAMP Pro for Mac ...

  8. Cnblogs自定义皮肤css样式-星空观测者

    不知不觉来Cnblogs也这么久了,然而Blogs提供的主题还是依旧那么复古,总觉得阅读起来难免枯燥,虽然我认为做技术不可以太过浮躁,但是一个美观的主题终究是吸引人眼的第一要素. 毕竟这么久了,在博客 ...

  9. cnblogs技术知识共享

    首先,我非常感谢cnblogs这么好的一个平台给我们这些计算机方面的人提供这么一个共享的平台! 其次,我希望大家共享知识,共同交流进步! 然后,如果在转载中侵犯了您的权益,请直言,会立刻删除.

随机推荐

  1. Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.

    报错信息:Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQL ...

  2. 八皇后II

    用一个数组state记录已经选择的每一行皇后所在的位置,DFS count = 0 N = 8 state = [0]*N def dfs(row): global count for col in ...

  3. poj1273(Edmonds-Karp)

    这道题可以算是例题了. 求解最大流,采用EK算法,用广搜查找增广路径,找到后更新网络流矩阵,循环执行直至找不到增广路径为止.这里要小心的是重复边的情况. 程序也是参照了网上的模版来写的,有一些技巧.如 ...

  4. C++下的强制转换类型

    一.static_cast static_cast,静态类型转换.   下面,我举几个例子,大家就能清楚了. int main(int argc, char const *argv[]) { char ...

  5. BlocksKit(2)-DynamicDelegate

    BlocksKit(2)-DynamicDelegate 动态代理可以说是这个Block里面最精彩的一部分了,可以通过自己给一个类的的协议方法指定对应的block来实现让这个协议的回调都直接在bloc ...

  6. JavaScript 继承和数组

    前言 因为篇幅比较短,所以将JavaScript中的继承和数组进行统一写. 继承 当一个函数对象被创建的时候,Function构造器产生的函数对象会运行类似这样的代码: this.prototype ...

  7. wxwidget wxpython 可视化开发工具

    wxwidget官方建议的工具集合:http://wiki.wxwidgets.org/Tools 支持wxpython可视化开发工具 wxFormBuilder wxGlade wxDesigner ...

  8. POJ 1904 King's Quest tarjan

    King's Quest 题目连接: http://poj.org/problem?id=1904 Description Once upon a time there lived a king an ...

  9. C#高级编程9-第3章 对象与类型

    类与结构 类和结构都是对象的模板 类定义了处理和访问数据的方法,通过类的实例化进行逻辑处理 类与结构的区别是类是引用类型,存储在托管堆上:结构是值类型,存储在栈上的: 类使用class进行修饰,结构使 ...

  10. Linux下禅道系统的搭建

    说明: 禅道系统的搭建,分两大部分 1.xampp环境的搭建 2.禅道系统的搭建 *********************************************************** ...