新闻客户端

package com.example.news;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.loopj.android.image.SmartImageView;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
    private List<News> list;
    private ListView lv;

    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case 1:
                lv = (ListView) findViewById(R.id.lv);
                lv.setAdapter(new MyAdapter());

                break;

            }
        };
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //因为这里解析xml文件是在子线程里做的,而lv.setAdapter(new MyAdapter());是在主线程里做的
        //如果主线程先执行的话,子线程xml还没有解析完,就会报空指针异常
        //lv.setAdapter(new MyAdapter());
        getInfo();

    }
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.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;
        }

        @Override
        public View getView(int arg0, View view, ViewGroup arg2) {
            News news  = list.get(arg0);
            ViewHolder myHolder;
            View v=null;
            if(view == null){
                v = View.inflate(MainActivity.this, R.layout.item_lv, null);
                myHolder = new ViewHolder();
                myHolder.img = (SmartImageView) v.findViewById(R.id.img);
                myHolder.tv_title = (TextView) v.findViewById(R.id.tv_title);
                myHolder.tv_show = (TextView) v.findViewById(R.id.tv_show);
                myHolder.tv_num = (TextView) v.findViewById(R.id.tv_num);
                v.setTag(myHolder);
            }else{
                v = view;
                myHolder = (ViewHolder) v.getTag();
            }

            myHolder.tv_title.setText(news.getTitle());
            myHolder.tv_show.setText(news.getDetail());
            myHolder.tv_num.setText(news.getComment()+"条评论");
            myHolder.img.setImageUrl(news.getImage());

            return v;
        }
        class ViewHolder{
            SmartImageView img ;
            TextView tv_title ;
            TextView tv_show;
            TextView tv_num;
        }

    }

    private void getInfo() {
        Thread t = new Thread() {
            @Override
            public void run() {
                String path = "http://192.168.0.111:8080/images/news.xml";
                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url
                            .openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(5000);
                    conn.setReadTimeout(5000);
                    if (conn.getResponseCode() == 200) {
                        InputStream in = conn.getInputStream();
                        //pull解析xml文件
                        parseNews(in);

                    } else {

                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        };
        t.start();
    }

    private void parseNews(InputStream in) {
        XmlPullParser xp = Xml.newPullParser();
        try {
            // 初始化
            xp.setInput(in, "utf-8");
            // 返回节点类型
            int type = xp.getEventType();
            News news = null;
            while (type != XmlPullParser.END_DOCUMENT) {
                switch (type) {
                case XmlPullParser.START_TAG:
                    if ("newslist".equals(xp.getName())) {
                        list = new ArrayList<News>();
                    } else if ("news".equals(xp.getName())) {
                        news = new News();
                    } else if ("title".equals(xp.getName())) {
                        news.setTitle(xp.nextText());
                    } else if ("detail".equals(xp.getName())) {
                        news.setDetail(xp.nextText());
                    } else if ("comment".equals(xp.getName())) {
                        news.setComment(xp.nextText());
                    } else if ("image".equals(xp.getName())) {
                        news.setImage(xp.nextText());
                    }

                    break;
                case XmlPullParser.END_TAG:
                    if ("news".equals(xp.getName())) {
                        list.add(news);
                    }
                    break;

                }

                // 移动到下一个节点
                type = xp.next();
            }
//            for (int i = 0; i < list.size(); i++) {
//
//                System.out.println(list.get(i).toString());
//            }
            //必须得在解析之后才能给listview设置适配器
            handler.sendEmptyMessage(1);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

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

public class News {
    private String title;
    private String detail;
    private String comment;
    private String image;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDetail() {
        return detail;
    }
    public void setDetail(String detail) {
        this.detail = detail;
    }
    public String getComment() {
        return comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    @Override
    public String toString() {
        return "News [title=" + title + ", detail=" + detail + ", comment="
                + comment + ", image=" + image + "]";
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <com.loopj.android.image.SmartImageView
        android:id="@+id/img"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:text="阿是讲道理费劲啊实例叠加飞拉萨的减肥蓝色"
            android:textSize="25sp" />

        <TextView
            android:id="@+id/tv_show"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:lines="2"
            android:text="阿是讲道理费劲啊实例叠sfasfasdfasdasdfasdfasdfas加飞拉萨的减肥蓝色"
            android:textColor="@android:color/darker_gray" />

        <TextView
            android:id="@+id/tv_num"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:text="1000条评论"
            android:textColor="#ff0000"
            android:gravity="right"/>
    </LinearLayout>

</LinearLayout>
时间: 2024-10-22 03:40:40

新闻客户端的相关文章

一个基于Android系统的新闻客户端(一)

一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的安卓程序. 二.客户端 我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图: 其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉. 新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码: <?xml v

较好的IOS新闻客户端应用源码

兼容性较好的新闻客户端应用源码,这个是一款国外新闻客户端源码,并且这款应用兼容性非常好的,可以很好地兼容iPhone和iPad的使用,而且应用的功能很多,新闻列表,上啦下拉刷新效果,评论列表,在线评论,用户中心,个人评论管理,搜藏管理,新闻搜索等等 <ignore_js_op> <ignore_js_op><ignore_js_op> <ignore_js_op> 详细说明:http://ios.662p.com/thread-1473-1-1.html 较

android Title滑块动画实现(适合新闻客户端多种栏目的展示)

先上效果图,选择不同的模块,滑动会通过动画形式滑过去,这种适合新闻客户端多种栏目的展示: 这么写Layout: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background

开源:我的Android新闻客户端,速度快、体积小、支持离线阅读、操作简便、内容展现形式丰富多样、信息量大、功能全面 等(要代码的留下邮箱)

分享:我的Android新闻客户端,速度快.体积小.支持离线阅读.操作简便.内容展现形式丰富多样.信息量大.功能全面 等(要代码的留下邮箱) 历时30天我为了开发这个新闻客户端APP,以下简称觅闻 http://m.yunxunmi.com/ 由于本人比较愚钝,不太擅长各种开源代码的运用,因此全部从0开始开发,期间开发了: 一个新闻采集器(C++),截止目前为止已经连续运行20多天没出现任何故障,采集接近150个大中型新闻分类网站,采集器下载及介绍网站预计下周免费发布,风格类似我的即时通讯网站 

ActionBar+DrawerLayout实现网易新闻客户端首页

一.概述 随着android版本的不断的更新,google推出了越来越多的高级组件,采用这些官方组件我们可以方便的实现一些以前需要通过复杂编码或者使用第三方组件才能实现的效果,比如slidingmenu.sherlockactionbar等.在这里,我们通过使用android的官方组件ActionBar和DrawerLayout来实现网易新闻客户端首页的效果. 由于ActionBar和DrawerLayout都是后来推出的,如果需要兼容低版本必须在项目中添加v7支持库.具体如何添加支持库在此不做

新闻客户端应用项目源码

基于百度数据,一个非常好用的新闻客户端. <ignore_js_op> 源码下载:http://code.662p.com/list/11_1.html 3p21140099AU546.jpg (158 KB, 下载次数: 0) 下载附件  保存到相册 2016-3-7 16:43 上传 百度数据, 客户端, 项目 详细说明:http://android.662p.com/thread-6499-1-1.html

聚合类新闻客户端的改进

zaker和鲜果是最早的聚合类新闻产品,前几年发展很快,迅速占领了市场,但近两年发展变得缓慢,而今日头条自发布以来才两年,用户量就迅速超过了zaker和鲜果,使用起来非常简单,左右滑动切换频道,上下滑动浏览新闻,点击进入新闻详情页,而zaker和鲜果则不同,界面清新,拥有独特的页面布局,但对于首次使用的用户,门槛较高,这将直接影响用户量. 网络媒体与纸质媒体不同,网络环境下,信息量巨大,用户读取信息的速度非常快,很多信息只是用眼睛扫一扫,感兴趣的才会去看,所以一眼看到的信息量越多,就越有可能找到

非常不错的新闻客户端应用安卓源码

这段时间做的一个新闻客户端,界面优美,数据都是从百度新闻那里直接抓取的,有json和html解析.上面的滑动Tab是通过自定义View自己画出来的,列表的图片都是通过异步软引用方式加载的,可以流畅的运行.另外新闻详情是使用webview加载部分html显示的,效果非常好,比直接解析html要好很多.整体较为美观,流畅. 以下是部分截图展示和源码:<ignore_js_op><ignore_js_op><ignore_js_op><ignore_js_op>&

集新闻和娱乐一体的iOS新闻客户端源码项目

TTNews 一个集新闻与娱乐于一体的iOS新闻客户端 .(为增加被搜索到的概率的关键词:News client,新浪新闻客户端,网易新闻,搜狐新闻,搜狐新闻,腾讯新闻,今日头条,百思不得姐,摇一摇夜间模式,视频播放,抓包)点Star,不迷路,项目是持续更新的哦!新手项目,多多包涵,谢谢![/url][url=]介绍:TTNews 作为一个集新闻与娱乐于一体的新闻客户端, 她具有阅读新闻,观赏搞笑图片,观赏搞笑视频等功能, 她采用MVC架构,拥有新闻,图片,视频,我四个模块, 她所涉及的技术有网

Android(java)学习笔记205:网易新闻客户端应用编写逻辑过程

1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容. 例如如下的网易RSS订阅: 2.由于我们这