HttpClient、XmlPullParser、ListView与BaseAdapter的综合用法

知识点总结

1、通过android API内置的类HttpClient从后台取出数据,HttpClient是一个接口,所以用他的子类来实例化DefaultHttpClient,具体的代码如下:

private List<News> getNewsFromInternet() {

HttpClient client = null;

try {

// 定义一个客户端

client = new DefaultHttpClient();

// 定义get方法

HttpGet get = new HttpGet("http://10.0.2.2:8080/NetEaseServer/new.xml");

// 执行请求

HttpResponse response = client.execute(get);

int statusCode = response.getStatusLine().getStatusCode();

if(statusCode == 200) {

InputStream is = response.getEntity().getContent();

List<News> newInfoList = getNewListFromInputStream(is);

return newInfoList;

} else {

Log.i(TAG, "访问失败: " + statusCode);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if(client != null) {

client.getConnectionManager().shutdown(); // 关闭和释放资源

}

}

return null;

}

3、XmlPullParser解析从后来发送过来的XML文件

private List<News> getNewListFromInputStream(InputStream is) throws Exception {

XmlPullParser parser = Xml.newPullParser(); // 创建一个pull解析器

parser.setInput(is, "utf-8"); // 指定解析流, 和编码

int eventType = parser.getEventType();

List<News> newInfoList = null;

News newInfo = null;

while(eventType != XmlPullParser.END_DOCUMENT) { // 如果没有到结尾处, 继续循环

String tagName = parser.getName(); // 节点名称

switch (eventType) {

case XmlPullParser.START_TAG: // <news>

if("news".equals(tagName)) {

newInfoList = new ArrayList<News>();

} else if("new".equals(tagName)) {

newInfo = new News();

} else if("title".equals(tagName)) {

newInfo.setTitle(parser.nextText());

} else if("detail".equals(tagName)) {

newInfo.setDetail(parser.nextText());

} else if("comment".equals(tagName)) {

newInfo.setComment(parser.nextText());

} else if("image".equals(tagName)) {

newInfo.setBitmap(parser.nextText());

}

break;

case XmlPullParser.END_TAG: // </news>

if("new".equals(tagName)) {

newInfoList.add(newInfo);

}

break;

default:

break;

}

eventType = parser.next(); // 取下一个事件类型

}

return newInfoList;

}

3、绑定到ListView这个控件需要设置setAdapter的属性,属先要定义一个类来实现BaseAdapter,主要来实现BaseAdapter的二个方法,具体代码如下:

class Myadapter extends BaseAdapter{

@Override

public int getCount() {

// TODO Auto-generated method stub

return listnewsinfo.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = null;

if(convertView == null) {

LayoutInflater inflater = getLayoutInflater();

view = inflater.inflate(R.layout.activity_item, null);

} else {

view = convertView;

}

// 重新赋值, 不会产生缓存对象中原有数据保留的现象

SmartImageView sivIcon = (SmartImageView) view.findViewById(R.id.iv_itemimg_icon);

TextView tvTitle = (TextView) view.findViewById(R.id.tv_item_tvtitle);

TextView tvDetail = (TextView) view.findViewById(R.id.tv_item_discuss);

TextView tvComment = (TextView) view.findViewById(R.id.tv_item_content);

News newInfo = listnewsinfo.get(position);

sivIcon.setImageUrl(newInfo.getBitmap()); // 设置图片

tvTitle.setText(newInfo.getTitle());

tvDetail.setText(newInfo.getDetail());

tvComment.setText(newInfo.getComment() + "跟帖");

return view;

}

}

时间: 2024-11-05 19:38:28

HttpClient、XmlPullParser、ListView与BaseAdapter的综合用法的相关文章

ListView 自定义BaseAdapter实现单选打勾(无漏洞)

最近因为一个项目的原因需要自定义一个BaseAdapter实现ListVIew单选打勾的功能,虽然听起来很简单,我在网上也 看过一些例子,似乎是实现了,但往往存在一些漏洞.往往漏洞如下 1.网上例子item较少,item增多时漏洞出现,忽略了BaseAdapter中getView()方法中convertView重用的问题 2.忽略了BaseAdapter中getView()方法并不是一下子加载完所有item,上下拖动listview时item会重新加载,getview会重新被调用,所以上下拖动的

Android ListView使用BaseAdapter与ListView的优化 (转至 http://www.open-open.com/lib/view/open1339485728006.html)

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖.这时候最方便的方法就是使用灵活的适配器BaseAdapter了. ▲图4-35 BaseAdapter中的方法 使用BaseAdapter必须写一

listview与baseadapter

最近listview结合baseadapter运用较多,对二者也慢慢变得熟悉起来,在这里做一个小小总结. listview属于典型的适配器控件,适配器控件派生自android.widget.AdapterView,一般由三部分组成,控制视图.数据源.适配器对象.适配器对象的作用就是:构造列表项控件,并将数据项绑定到列表项控件中,baseadapter是一种较为常用且功能强大的适配器,关键在于getView()方法的实现: @Override public View getView(int pos

Android ListView使用BaseAdapter与ListView的优化

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖.这时候最方便的方法就是使用灵活的适配器BaseAdapter了. ▲图4-35 BaseAdapter中的方法 使用BaseAdapter必须写一

WPF的ListView控件自定义布局用法实例

本文实例讲述了WPF的ListView控件自定义布局用法.分享给大家供大家参考,具体如下: 概要: 以源码的形式贴出,免得忘记后,再到网上查资料.在VS2008+SP1环境下调试通过 引用的GrayscaleEffect模块,可根据参考资料<Grayscale Effect...>中的位置下载. 正文: 如何布局是在App.xaml中定义源码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

View(视图)——ListView之BaseAdapter

1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent

android开发最常用例子整理----(3)自定义ListView(自定义BaseAdapter实现)

在上一个教程中,我们使用SimpleAdapter实现自定义ListView,但是有一点不方便的是,如果要对每一个ListView的item选项进行不同的样式设置,就很麻烦,因为SimpleAdapter使用的是统一的风格样式.如果要实现不同item使用不同的风格样式,那么就要通过集成BaseAdapter来实现. 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override prot

android ListView 自定义 BaseAdapter

先上效果图 由上面的效果图可以看出:页面中的LISTVIEW的每一项,都是由两个TEXTVIEW组成,初始化的时候,只显示第一个TEXTVIEW,在这里我们成为标题,而内容部分的setVisible属性为"GONE".为Ite添加onClick监听器,在每次点击的时候,显示内容部分,这里需要调用BaseAdapter的notifyDataSetChanged()进行刷新显示. 代码部分: 1 class MyLayout extends LinearLayout { 2 3 priva

View(视图)——ListView之BaseAdapter和SimpleCursorAdapter以及网格视图代码视图

一.BaseAdapter 1.数据源  List<Object> 一般是放实体类.POJO类,一般只包含私有属性和属性的getter和setter方法. 2.layout:可以用布局,包含多个视图. 3.抽象类:必须要继承并实现4个抽象方法 1-int getCount()  返回数据源的记录数 2-Object getItem(int position) 返回索引对应的数据对象 3-long getItemId(int position)  返回索引对应的数据对象的ID 4-View ge