展会信息港展会大全

Android中ListView异步加载数据
来源:互联网   发布日期:2015-11-26 13:58:04   浏览:3145次  

导读:1.主Activity 1 public class MainActivity extends Activity { 2 3 private ListView listView; 4 private ArrayListPerson persons; 5 private ListAdapter adapter; 6 private Handler handler=null; 7 //xml文件的网络地址 8 final String path=http://1...

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>

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港