zoukankan      html  css  js  c++  java
  • android之简易新闻客户端

    将一个新闻信息保存到一个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

  • 相关阅读:
    react native 学习资料整理
    yii cookie ,session 操作
    react native 的js 文件从哪里获取
    react native与现有的应用程序集成
    ubuntu 12.04 react-native 安装
    html ul li的学习
    CAGradientLayer的一些属性解析
    ubuntu 安装 swoole 和mac 安装swoole 扩展
    iOS React-Native入门指南之HelloWorld
    实现微信浏览器内打开App Store链接(已被和谐,失效了)
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5616845.html
Copyright © 2011-2022 走看看