分类:android 95人阅读 评论(0) 收藏 举报

1.主Activity

复制代码
 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     @Override17     public int getCount() 18     {19         return data.size();20     }21 22     @Override23     public Object getItem(int position) 24     {25         return data.get(position);26     }27 28     @Override29     public long getItemId(int position)30     {31         return position;32     }33 34     @Override35     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         else52         {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 ObjectClass82     {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>
复制代码

运行结果如下

Android中ListView异步加载数据_第1张图片

分享到:

更多相关文章

  1. Android下的SQLite数据库的相关操作及AndroidTestCase测试
  2. Android中Data和String数据类型转换
  3. Android room操作数据库
  4. android中ListView数据刷新时的同步
  5. 第一个Android登录页面 | HTTP 请求验证登录 | 完整代码
  6. android 参数 加密,解密 参数提交,数据返回
  7. Android Audio代码分析17 - setvolume函数
  8. android动态布局:用java代码实现LinearLayout以及TextView
  9. android 数据库初体验

随机推荐

  1. Android 自定义控件-SnakeLayout (仿galle
  2. Android studio获取证书指纹 (SHA1)的方
  3. Android命名规范,开发规范,注意点整理(一)
  4. Android通知系统源码解析
  5. Android 日历开发教程[三]
  6. Mac修改环境变量路径中带空格的处理
  7. Android 之窗口小部件高级篇--App Widget
  8. 手把手教你搭建 NDK 环境搭建
  9. android 通信开发要用的文档
  10. 【Android】单例模式的推荐写法