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

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.  
  96. }

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[]);
  14. HttpURLConnection conn=(HttpURLConnection) url.openConnection();
  15. conn.setRequestMethod("POST");
  16. conn.setConnectTimeout();
  17. if(conn.getResponseCode()==)
  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="">
  4. <name>张三</name>
  5. <sex></sex>
  6. <age></age>
  7. <path>http://192.168.5.10:8080/FileServer/chengjisihan.jpg</path>
  8. </person>
  9. <person id="">
  10. <name>李斯</name>
  11. <sex></sex>
  12. <age></age>
  13. <path>http://192.168.5.10:8080/FileServer/laozi.jpg</path>
  14. </person>
  15. <person id="">
  16. <name>王五</name>
  17. <sex></sex>
  18. <age></age>
  19. <path>http://192.168.5.10:8080/FileServer/lilongji.jpg</path>
  20. </person>
  21. <person id="">
  22. <name>庞聪</name>
  23. <sex></sex>
  24. <age></age>
  25. <path>http://192.168.5.10:8080/FileServer/lishimin.jpg</path>
  26. </person>
  27. <person id="">
  28. <name>孙膑</name>
  29. <sex></sex>
  30. <age></age>
  31. <path>http://192.168.5.10:8080/FileServer/lisi.jpg</path>
  32. </person>
  33. <person id="">
  34. <name>孙武</name>
  35. <sex></sex>
  36. <age></age>
  37. <path>http://192.168.5.10:8080/FileServer/liyuan.jpg</path>
  38. </person>
  39.  
  40. <person id="">
  41. <name>成吉思汗</name>
  42. <sex></sex>
  43. <age></age>
  44. <path>http://192.168.5.10:8080/FileServer/sunbiin.jpg</path>
  45. </person>
  46.  
  47. <person id="">
  48. <name>李渊</name>
  49. <sex></sex>
  50. <age></age>
  51. <path>http://192.168.5.10:8080/FileServer/sunwu.jpg</path>
  52. </person>
  53.  
  54. <person id="">
  55. <name>李隆基</name>
  56. <sex></sex>
  57. <age></age>
  58. <path>http://192.168.5.10:8080/FileServer/wangwu.jpg</path>
  59. </person>
  60. <person id="">
  61. <name>武则天</name>
  62. <sex></sex>
  63. <age></age>
  64. <path>http://192.168.5.10:8080/FileServer/wuzetian.jpg</path>
  65. </person>
  66. </Persons>

运行结果如下

Android ListView异步加载数据的更多相关文章

  1. android 网络异步加载数据进度条

    ProgressDialog progressDialog = null; public static final int MESSAGETYPE = 0; private void execute( ...

  2. android listview 异步加载图片并防止错位

    网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertVie ...

  3. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  4. Android中ListView异步加载数据

    1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...

  5. android ListView异步加载图片(双缓存)

    首先声明,参考博客地址:http://www.iteye.com/topic/685986 对于ListView,相信很多人都很熟悉,因为确实太常见了,所以,做的用户体验更好,就成了我们的追求... ...

  6. android ListView 分页加载数据

    1.mainActivity <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  7. 转:Android ListView 异步加载图片

    http://www.iteye.com/topic/1118828 http://www.iteye.com/topic/1127914 这样做无疑是非常可取的方法,但是加载图片时仍然会感觉到轻微的 ...

  8. Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法

    Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...

  9. listview异步加载图片并防止错位

    android listview 异步加载图片并防止错位 网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 conver ...

随机推荐

  1. "ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法

    引自:http://hi.baidu.com/fynaa/item/c2978952d8d542dfd48bacf6 讲了一大堆: 综合下: 解决方案:select session_id from v ...

  2. MVC中的URL路由(一)

    URL路由系统通过对请求地址进行解析从而得到以目标Controller名称为核心的路由数据.Url路由系统最初是为了实现请求url与物理文件路径分离而建立的,MVC的Url Route是将Url地址与 ...

  3. DevExpres表格控件运行时动态设置表格列

    本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...

  4. SQL Server 脚本语句

    一.语法结构 select select_list [ into new_table ] from table_source [ where search_condition ] [ group by ...

  5. gdal中文路径无法打开问题

    在C#中使用OGR读写矢量数据时,需要引用“using OSGeo.OGR;”. 同时为了处理中文路径和中文字段,需要在开始设置下面两个属性,代码如下: //为了支持中文路径,请添加下面这句代码(大多 ...

  6. python模块与包

    模块是包括python定义和声明的文件.文件名=模块名+".py".模块名保存在全局变量__name__中. 1.模块中的执行语句,只是在导入时执行一次.这些语句通常用于初始化模块 ...

  7. ios毛玻璃效果

    方法一:支持所有ios系统版本: - (void)setupBlurView { UIImageView *darkView = [[UIImageView alloc] init]; darkVie ...

  8. 解决IE浏览器IFrame对象内存不释放问题

    最近项目组发现在使用showModalDialog弹出窗体中如果包含IFrame对象,则IFrame对象占用的内存资源在窗体关闭后不会释放.弹出关闭反复多次后,IE浏览器内存占用可超过数百M,严重时I ...

  9. C# 内存法图像处理

    内存法通过把图像储存在内存中进行处理,效率大大高于GetPixel方法,安全性高于指针法. 笔者当初写图像处理的时候发现网上多是用GetPixel方法实现,提到内存法的时候也没有具体实现,所以笔者在这 ...

  10. JamCam创业故事:辞掉工作,去开发一个应用

    编者按:这是JamCam创始人的自述.这家初创公司提供的应用很简单,但是极为成功:有了JamCam,你所录制的视频会自动添加你正在iPhone中聆听的音乐,作为视频的背景音乐.和朋友分享时是不是方便多 ...