一丶一个简单的访问服务器(访问网易新闻客户端)
点击加载新闻:首页的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="click" android:text="点击显示网易新闻" /> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView></LinearLayout>
listView中的布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.loopj.android.p_w_picpath.SmartImageView android:id="@+id/iv" android:layout_width="80dp" android:layout_height="80dp" /> <TextView android:id="@+id/tvTitle" android:layout_toRightOf="@id/iv" android:layout_marginLeft="5dp" android:textSize="16dp" android:textColor="#000000" android:textStyle="bold" android:text="我是标题" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tvDiscription" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tvTitle" android:layout_alignLeft="@id/tvTitle" android:textSize="12dp" android:maxLines="3" android:textColor="#99000000" android:text="我是内容" /> <TextView android:id="@+id/tvInfo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是跟帖" android:textSize="10dp" android:layout_marginRight="5dp" android:layout_alignParentRight="true" android:layout_alignBottom="@id/iv" /></RelativeLayout>
2.MainActivity中代码
public void click(View view){ new Thread(){ public void run() { //1.创建网络地址对象 String path = "http://192.168.1.184:8080/news/news.xml" ;//服务端地址 try { URL url = new URL(path) ; //打开连接 HttpURLConnection http = (HttpURLConnection) url.openConnection() ; http.setConnectTimeout(5000) ; //拿到服务器返回的状态吗 int code = http.getResponseCode() ; //判断状态吗 if(code == 200){ //流中是xml文件 InputStream is = http.getInputStream() ; list = StreamUtils.getNewsList(is) ;//解析XML放回的list集合 runOnUiThread(new Runnable() { //将流中的xml文件解析成集合 @Override public void run() { lv.setAdapter(new MyAdapter()) ; } }) ; }else{ runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "请求失败", 0).show() ; } }) ; } } catch (Exception e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "网络不通,请检查网络是否开启", 0).show() ; } }) ; } }; }.start() ; } class MyAdapter extends BaseAdapter{ @Override public int getCount() { return list.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) { //拿到布局填充器 LayoutInflater inflater = LayoutInflater.from(MainActivity.this) ; //加载布局文件 View view = null ; if(convertView == null){ view = inflater.inflate(R.layout.news, null) ; }else{ view = convertView ; } //拿到布局文件中的各个控件 TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle) ; TextView tvDesctiption = (TextView) view.findViewById(R.id.tvDiscription) ; TextView tvInfo = (TextView) view.findViewById(R.id.tvInfo) ; SmartImageView iv = (SmartImageView) view.findViewById(R.id.iv) ; //拿到新闻对象 NewsItem news = list.get(position) ; tvTitle.setText(news.getTitle()) ; //设置图片 iv.setImageUrl(news.getImage()) ; tvDesctiption.setText(StreamUtils.change(news.getDescription())) ; if(news.getType().equals("1")){ tvInfo.setText("跟帖:" + news.getConnent()) ; }else if(news.getType().equals("2")){ tvInfo.setText("专题") ; tvInfo.setTextColor(getResources().getColor(android.R.color.holo_blue_bright)) ; }else if(news.getType().equals("3")){ tvInfo.setText("视频") ; tvInfo.setTextColor(getResources().getColor(android.R.color.holo_red_light)) ; } return view; } }}
3.解析新闻XML的工具类
public static List<NewsItem> getNewsList(InputStream is) { List<NewsItem> list = new ArrayList<NewsItem>(); try { // 创建xml的解析器 XmlPullParser pull = Xml.newPullParser(); // 设置要解析的数据的编码 pull.setInput(is, "utf-8"); // 拿到事件类型 int type = pull.getEventType(); // 循环解析数据 NewsItem item = null; while (type != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_TAG: if("item".equals(pull.getName())){ item = new NewsItem() ; }else if("title".equals(pull.getName())){ item.setTitle(pull.nextText()) ; }else if("description".equals(pull.getName())){ item.setDescription(pull.nextText()) ; }else if("p_w_picpath".equals(pull.getName())){ item.setImage(pull.nextText()) ; }else if("type".equals(pull.getName())){ item.setType(pull.nextText()) ; }else if("comment".equals(pull.getName())){ item.setConnent(pull.nextText()) ; } break; case XmlPullParser.END_TAG: if("item".equals(pull.getName())){ list.add(item) ; item = null ; } break; } //拿到下一个事件 type = pull.next() ; } } catch (Exception e) { e.printStackTrace(); } return list ; }
4.肯定有一个新闻对象News(要创建一个bean包中有News类封装新闻消息)
5.别忘了记得添加访问internet权限
6.服务端创建的News(附件里面有)
注:要加载图片我们要用到smartp_w_picpathview加载图片(smrtImageview包附件里面)