listview动态获取数据

简介:  1.主Activity 1 public class MainActivity extends Activity { 2 3 private ListView listView; 4 private ArrayList<Person> persons; 5 private ListAdapter adapter;


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     @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>
复制代码
复制代码

运行结果如下

 

目录
相关文章
|
3月前
|
人工智能 运维 Kubernetes
技术人的知识输出利器:一套高质量知乎回答生成指令模板
本文提供一套系统化知乎高赞回答生成模板,结合AI工具(如DeepSeek、通义千问),助力技术人高效输出高质量内容。涵盖结构框架、质量检查、实战示例与合规建议,提升表达清晰度与内容价值,适用于经验分享、技术科普等多种场景,实现知识输出的标准化与高效化。
305 4
|
2月前
|
云安全 人工智能 运维
阿里云ACA认证是什么?有必要考吗?ACA工程师认证费用及考试大纲说明
阿里云ACA认证是初级职业认证,适合学生和初学者,系统学习云计算、大数据、AI等基础知识,掌握阿里云产品应用。考试60分钟,满分100分,80分及格,题型为选择题。现价450元,含2次考试机会。对入门者、求职者及非技术背景人员具高性价比,助力职业发展。
610 39
|
5月前
|
监控 搜索推荐 API
《巧用拼多多 API,精准分析拼多多店铺流量转化密码》
本文详解如何利用拼多多API实现店铺流量转化分析,通过数据驱动优化运营策略。内容涵盖API接入方法、流量与转化率计算模型、优化策略及实战案例,助力商家精准提升销售转化与运营效率。
335 0
|
3月前
|
人工智能 自然语言处理 机器人
别让AI“答非所问”:用数据调教聊天机器人,越聊越聪明
别让AI“答非所问”:用数据调教聊天机器人,越聊越聪明
378 11
|
3月前
|
人工智能 DataWorks 算法
智能体创业新风口:从算法开发到IP运营的范式转移——AI智能体如何重塑创新创业的底层逻辑
AI正从技术工具演变为具备人格的智能体,催生“智能体创业”新风口。本文探讨如何通过人格化IP、生态运营与阿里云赋能,实现从算法创新到商业化的范式转移,重塑未来创业格局。
|
4月前
|
算法 API 数据库
生鲜电商技术实践:基于保质期API的自动下架系统保障食品安全
基于保质期提醒API与自动化工作流,实现生鲜商品临期智能预警与自动下架。通过设定差异化预警阈值(如蔬菜2天、冷冻品7天),每日扫描数据库并触发下架指令,确保食品安全合规,降低损耗与客诉,提升运营效率。
302 0
|
10月前
|
存储 人工智能 Cloud Native
【云故事探索】NO.13:全链路「长」在阿里云上!极氪汽车全速打造智能出行好体验
本文探讨了极氪汽车从创立到快速发展的背后,数字化体系对其成功的支撑作用。极氪通过与阿里云合作,利用云计算、PaaS服务及AI大模型等技术,实现了敏捷高效的用户体验和业务迭代。文章还分析了极氪在车联网安全、数据处理以及智能化座舱方面的技术突破,并指出全栈上云已成为智能电动车企业的必然选择,助力其在全球化与智能化趋势中脱颖而出。极氪的成功不仅源于产品定位,更得益于其对先进技术的深度应用。
|
前端开发 JavaScript 流计算
canvas系列教程05 ——交互、动画
canvas系列教程05 ——交互、动画
174 0
基于typora编写Markdown文档
如何使用Typora编写Markdown文档的教程,包括软件设置、快捷键使用以及一些使用技巧。
378 18
|
SQL 消息中间件 分布式计算
基于数据湖格式构建流式增量数仓—CDC
该文章内容源于 Apache Con ASIA 2022上的分享,整理归纳成文章。
15530 5
基于数据湖格式构建流式增量数仓—CDC

热门文章

最新文章