您的位置:首页 > 移动开发 > Android开发

android之简易新闻客户端

2016-06-25 20:39 489 查看
将一个新闻信息保存到一个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>


View Code
新闻信息以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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: