简单的新闻列表页面

public class MainActivity extends Activity {

	private static final String TAG = "MainActivity";
	ListView listview = null;
	List<news> listnew = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();//在应用开始时 执行此方法
	}

	private void init() {
		listview = (ListView) findViewById(R.id.listnew);//得到listview 用于绑定新闻数据 
//因为是访问网络,在主线程里4.0以上都不可以了 所以要开启一个子线程。
		new Thread(new Runnable() {
			@Override
			public void run() {
				//执行此方法  抓取新闻数据  返回新闻list集合
				listnew = getnewfrominternet();
				//这个方法可以在子线程中 相当于在ui线程执行
				runOnUiThread(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						myadtper adapter = new myadtper();//listview控件需要一个实现了BaseAdapter的类来实现绑定
						listview.setAdapter(adapter);//填充器数据集设置给listview
					}
				});

			}
		}).start();
		// 绑定数据

	}

	/**
	 * 访问网络获取数据
	 */
	private List<news> getnewfrominternet() {
		HttpClient client = null;//new一个httpclint客户端
		try {
			client = new DefaultHttpClient();//因为httpclient是个 接口不可以直接实现,所以new 一个实现了接口的DefaultHttpClient类
			HttpGet get = new HttpGet(
					"http://192.168.0.101:8080/NetEaseServer/new.xml");//实例化httpget请求 并设置
			HttpResponse response = client.execute(get);//执行请求 返回值是httprespones 对象
			int code = response.getStatusLine().getStatusCode();//这个是从客户端请求返回对象里获得 执行状态码
			if (code == 200) {
				InputStream is = response.getEntity().getContent();//从返回对象里获得返回流 
				return getnewlistfrominputstream(is);//解析这个流 返回为list的实体集合
			} else {
				Log.i(TAG, "访问失败:" + code);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (client != null) {
				client.getConnectionManager().shutdown();//关闭客户端 首先获得一客户端管理对象,在给他shutdown
			}
		}
		return null;

	}

	/**
	 * 得到新闻list从流中,解析流
	 * 
	 * @param is
	 * @return
	 * @throws Exception
	 */
	private List<news> getnewlistfrominputstream(InputStream is)
			throws Exception {
		XmlPullParser pull = Xml.newPullParser();// 获得pull解析器
		pull.setInput(is, "utf-8");// 定义解析器 解析流和编码
		int eventype = pull.getEventType();//获得事件类型
		List<news> list = null;
		news newtemp = null;
		while (eventype != XmlPullParser.END_DOCUMENT)// 判断是否循环到结尾
		{
			String tagname = pull.getName();// 节点名称
			switch (eventype) {
			case XmlPullParser.START_TAG://开始节点
				//<news>
				if ("news".equals(tagname)) {
					list = new ArrayList<news>();
				}
				//<new>
				else if ("new".equals(tagname)) {
					newtemp = new news();
				}
				//<title>
				else if ("title".equals(tagname)) {
					newtemp.setTitle(pull.nextText());
				} else if ("detail".equals(tagname)) {
					newtemp.setDetali(pull.nextText());
				} else if ("comment".equals(tagname)) {
					newtemp.setComment(Integer.valueOf(pull.nextText()));
				} else if ("image".equals(tagname)) {
					newtemp.setImageurl(pull.nextText());
				}
				break;
			case XmlPullParser.END_TAG://判断一个实体xml是否结束 结束就添加到list集合里
				if ("new".equals(tagname)) {
					list.add(newtemp);
				}
				break;
			}
			eventype = pull.next();// 下一个事件
		}
		return list;
	}

	class myadtper extends BaseAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return listnew.size();// 返回总长度
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return 0;
		}

		/**
		 * 返回item的子条目 布局
		 */
		@Override
		public View getView(int position, View converview, ViewGroup parent) {
			View view = null;
			//判断是否为空 为空就 实例化一个 不为空 就从缓存里直接使用
			if (converview == null) {
				LayoutInflater lay = getLayoutInflater();//实例化一个打气筒
				view = lay.inflate(R.layout.listview_item, null);//设置list item的样式 xml 需要另外定义
			} else {
				view = converview;
			}
//这个理获得 界面上的控件,这里不能直接用findViewById(R.id.listnew) 因为这些控件不在这个界面下 需要在view里获得
			SmartImageView sivicon = (SmartImageView) view
					.findViewById(R.id.siv_listview_item_icon);
			TextView tv_title = (TextView) view.findViewById(R.id.title);
			TextView tv_comment = (TextView) view.findViewById(R.id.comm);
			TextView tv_content = (TextView) view.findViewById(R.id.content);
			news ns = listnew.get(position);
			sivicon.setImageUrl(ns.getImageurl());

			tv_title.setText(ns.getTitle());
			tv_content.setText(ns.getDetali());
			tv_comment.setText(ns.getComment() + "跟帖");
			return view;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值