将一个新闻信息保存到一个XML文件中,并将放在服务器下。通过手机客户端来从服务器下载该文件并解析显示。

news.xml


<?xml version="1.0" encoding="UTF-8" ?>
<newslist>
<news>
<title>黑马52期就业快报</title>
<detail>热烈祝贺黑马52期平均薪水突破13k</detail>
<comment>15687</comment>
<image>http://192.168.0.109/images/6.jpg</image>
</news>
<news>
<title>程序员因写代码太乱被杀害</title>
<detail>凶手是死者同事,维护死者代码时完全看不懂而痛下杀手</detail>
<comment>16359</comment>
<image>http://192.168.0.109/images/7.jpg</image>
</news>
<news>
<title>3Q大战宣判: 腾讯获赔500万</title>
<detail>最高法驳回360上诉, 维持一审宣判.</detail>
<comment>6427</comment>
<image>http://192.168.0.109/images/1.jpg</image>
</news>
<news>
<title>今日之声:北大雕塑被戴口罩</title>
<detail>市民: 因雾霾起诉环保局; 公务员谈"紧日子": 坚决不出去.</detail>
<comment>681</comment>
<image>http://192.168.0.109/images/2.jpg</image>
</news>
<news>
<title>轻松一刻: 我要沉迷学习不自拔</title>
<detail>放假时我醒了不代表我起床了, 如今我起床了不代表我醒了!</detail>
<comment>11616</comment>
<image>http://192.168.0.109/images/4.jpg</image>
</news>
<news>
<title>男女那些事儿</title>
<detail>"妈, 我在东莞被抓, 要2万保释金, 快汇钱到xxx!"</detail>
<comment>10339</comment>
<image>http://192.168.0.109/images/5.jpg</image>
</news>
<news>
<title>赵帅哥语录一</title>
<detail>少壮不努力,老大做IT</detail>
<comment>14612</comment>
<image>http://192.168.0.109/images/8.jpg</image>
</news>
<news>
<title>奥巴马见达是装蒜</title>
<detail>外文局: 国际民众认可中国大国地位;法院: "流量清零"未侵权.</detail>
<comment>1359</comment>
<image>http://192.168.0.109/images/3.jpg</image>
</news>
</newslist>

新闻信息以XML方式进行保存,文件的编码是UTF-8。文件中的IP地址是自己服务器地址,图片需要自己准备。

布局文件


子布局文件item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="xidian.dy.com.chujia.MainActivity"> <com.loopj.android.image.SmartImageandroid:id="@+id/img"
android:layout_width="72dp"
android:layout_height="72dp"
android:src="@drawable/dog"
android:layout_centerVertical="true"
/>
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="小狗"
android:textSize="22sp"
android:layout_toRightOf="@+id/img"
/>
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一条小狗"
android:layout_below="@+id/title"
android:layout_alignLeft="@+id/title"
android:lines="2"
android:textColor="@android:color/darker_gray"
android:textSize="15sp"
/>
<TextView
android:id="@+id/comment"
android:layout_width="wrap_content"
android:layout_below="@+id/content"
android:layout_height="wrap_content"
android:text="1223条评论"
android:textColor="#ff0000"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>

主布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="xidian.dy.com.chujia.MainActivity"> <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>

java代码


javabean 

package xidian.dy.com.chujia;

/**
* Created by dy on 2016/6/25.
*/
public class NewsBean {
private String title;
private String content;
private String commnets;
private String imgUrl; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} public String getCommnets() {
return commnets;
} public void setCommnets(String commnets) {
this.commnets = commnets;
} public String getImgUrl() {
return imgUrl;
} public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}

MainActivity.java 

package xidian.dy.com.chujia;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Xml;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; import com.loopj.android.image.SmartImageView; import org.xmlpull.v1.XmlPullParser; import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity {
private List<NewsBean> list;
Handler handler = new Handler(){
//主线程从list中获取新闻内容
@Override
public void handleMessage(Message msg) {
if(msg.what == 0){
ListView lv = (ListView) findViewById(R.id.lv);
if(lv != null){
lv.setAdapter(new MyAdapter());
}
}
}
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getNewsFromNet();
} private void getNewsFromNet(){
list = new ArrayList<>();
new Thread(new Runnable() {
NewsBean news;
@Override
public void run() {
try {
//从获取新闻内容,传输格式的XML
//通过PULL模式解析XML文件并将其封装为javabean保存到List中
URL url = new URL("http://192.168.0.109/news.xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.connect();
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
XmlPullParser xmlPull = Xml.newPullParser();
xmlPull.setInput(is,"utf-8");
while (xmlPull.getEventType() != XmlPullParser.END_DOCUMENT){
if(xmlPull.getEventType() == XmlPullParser.START_TAG)
if(xmlPull.getName().equals("news"))
news = new NewsBean();
else if(xmlPull.getName().equals("title")){
news.setTitle(xmlPull.nextText());}
else if(xmlPull.getName().equals("detail"))
news.setContent(xmlPull.nextText());
else if(xmlPull.getName().equals("comment"))
news.setCommnets(xmlPull.nextText());
else if(xmlPull.getName().equals("image")){
news.setImgUrl(xmlPull.nextText());
}
if(xmlPull.getEventType() == XmlPullParser.END_TAG && xmlPull.getName().equals("news"))
list.add(news);
xmlPull.next();
}
}
} catch (Exception e) {
e.printStackTrace();
}
//解析完毕向主线程发送消息
handler.sendEmptyMessage(0);
}
}).start();
} class MyAdapter extends BaseAdapter{ @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
NewsBean news = list.get(position);
ViewHolder vh;
View v;
if(convertView == null){
//将一个布局文件转为一个View对象
v = View.inflate(MainActivity.this, R.layout.item_list, null);
SmartImageView siv = (SmartImageView) v.findViewById(R.id.img);
TextView tv1 = (TextView) v.findViewById(R.id.title);
TextView tv2 = (TextView) v.findViewById(R.id.content);
TextView tv3 = (TextView) v.findViewById(R.id.comment);
vh = new ViewHolder();
vh.siv = siv;
vh.tvTitle = tv1;
vh.tvContent = tv2;
vh.tvComment = tv3;
//为v添加附带信息,方便下次使用
v.setTag(vh);
}
else{
//使用缓存中的View对象,避免重新创建
v = convertView;
vh = (ViewHolder) v.getTag();
} if(vh.siv != null)
vh.siv.setImageUrl(news.getImgUrl());
if(vh.tvTitle != null)
vh.tvTitle.setText(news.getTitle());
if(vh.tvContent != null)
vh.tvContent.setText(news.getContent());
if(vh.tvComment != null)
vh.tvComment.setText(news.getCommnets());
return v;
} class ViewHolder{
public SmartImageView siv;
public TextView tvTitle;
public TextView tvContent;
public TextView tvComment;
}
}
}

效果展示


在代码中引入了第三方代码android-smart-image-view

android之简易新闻客户端的更多相关文章

  1. Android实现网易新闻客户端效果

    下面来简单实现一下网易新闻客户端左右切换的效果,当然实际项目上肯定不能这样写,还有很多需要优化的地方. activity_main.xml [html] view plaincopyprint? &l ...

  2. Android ListView实现新闻客户端的新闻内容图文混排

    布局文件: <LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/andro ...

  3. 基于Android的小巫新闻客户端开发系列教程

    <ignore_js_op> 141224c6n6x7wmu1aacap7.jpg (27.51 KB, 下载次数: 0) 下载附件  保存到相册 23 秒前 上传   <ignor ...

  4. Android SlidingMenu 仿网易新闻客户端布局

    前面两篇文章中的SlidingMenu都出现在左侧,今天来模仿一下网易新闻客户端左右两边都有SlidingMenu的效果,以下是网易新闻客户端效果: 不扯闲话了,直接进入正题吧 frame_conte ...

  5. 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)

    原博客地址  :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...

  6. android 学习随笔九(网络:简单新闻客户端实现)

    1.简单新闻客户端 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  7. Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...

  8. android组件化方案、二维码扫码、Kotlin新闻客户端、动画特效等源码

    Android精选源码 CalendarView日历选择器 android下拉刷新动画效果代码 一个非常方便的fragment页面框架 android组件化方案源码 Zxing实现二维码条形码的扫描和 ...

  9. Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...

随机推荐

  1. java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法

    在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里 ...

  2. ggplot2颜色操作

    1.颜色列表

  3. 用shell脚本批量修改文件后缀名

    早上本想将一些照片上传到相册中,但是由于所有照片的扩展名都是JPG而不是小写的jpg,因此造成了“格式不正确”而不能上传照片.此刻就产生了这样一个问题:使用shell脚本如何批量将所有文件的扩展名JP ...

  4. Linux vagrant+virtualbox环境搭建步骤

    Linux vagrant+virtualbox环境搭建步骤 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用. 我们可 ...

  5. Sublime Text 2 (for OS X )配置成可以运行基于python3解释器的 .py文件

    Mac自带的python 其version是python 2.7 官网下的Sublime Text 2部署好了以后默认也是 为了使ST2 可以在command+B时可以运行基于python3的.py, ...

  6. HDU 3600 Simple Puzzle 归并排序 N*N数码问题

    先介绍八数码问题: 我们首先从经典的八数码问题入手,即对于八数码问题的任意一个排列是否有解?有解的条件是什么? 我在网上搜了半天,找到一个十分简洁的结论.八数码问题原始状态如下: 1 2 3 4 5 ...

  7. oracle wm_concat(column)函数的使用

    oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(c ...

  8. java 21 - 7 IO流小结的图解

  9. 如何替换orcl实例下的四个数据库

    1,drop 数据库对应的用户 2,创建新的表空间 新的用户 3,导入新的数据库 imp grid_sysdb/sagis@klmy file=F:\data\addr_interestpoint.d ...

  10. 06SpringMvc_适配器

    适配器的主要功能是去找控制器.Action实现了什么接口 本文案例实现的功能是:在页面上输入中文名字,然后在另外一个网页上显示出来. 案例结构: