如何做一个简易的新闻客户端

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:



1,下载一个服务端 tomcat

下载后开始运行,将需要浏览的东西,放在webapps-root文件下

这里假设有一个xml小文件,接下来就开始上代码了,

在同一个包下给mainactivity创造两个class文件,一个用来解析xml文件(解析方式多种,有兴趣可以上网查阅资料),一个用于存放数据

1,存放数据:

package com.example.xinwen;


public class News {

private String city;

private String temp;

private String wind;

private String pm250;

private String image;

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getTemp() {

return temp;

}

public void setTemp(String temp) {

this.temp = temp;

}

public String getWind() {

return wind;

}

public void setWind(String wind) {

this.wind = wind;

}

public String getPm250() {

return pm250;

}

public void setPm250(String pm250) {

this.pm250 = pm250;

}

public String getImage() {

return image;

}

public void setImage(String image) {

this.image = image;

}

}









2,解析xml文件

(1)假设xml文件长这样,将它放进tomcat里面即可

<?xml version="1.0" encoding="utf-8"?>

<weather>

        <channel>

     <city>北京</city>

 <temp>25°</temp>

 <image>http://192.168.1.101:8080/img/a.jpg</image>

 <wind>1</wind>

 <pm250>300</pm250>

 

</channel>

 <channel>

     <city>郑州</city>

 <temp>20°</temp>

 <image>http://192.168.1.101:8080/img/b.jpg</image>

 <wind>2</wind>

 <pm250>300</pm250>

 

</channel>

<channel>

     <city>长春</city>

 <temp>10°</temp>

 <image>http://192.168.1.101:8080/img/c.jpg</image>

 <wind>3</wind>

 <pm250>100</pm250>

 

</channel>

<channel>

     <city>沈阳</city>

 <temp>20°</temp>

 <image>http://192.168.1.101:8080/img/d.jpg</image>

 <wind>3</wind>

 <pm250>50</pm250>

</channel>



</weather>

(2)开始解析

package com.example.xinwen;


import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;


import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserException;


import android.util.Xml;


public class XmlPasser {

//解析xml的业务方法

public static List<News> parserXml(InputStream in) throws Exception{

List<News> newsLists=null;

News news=null;

//获取xml解析器

XmlPullParser parser=Xml.newPullParser();

//设置解析器,要解析的内容

parser.setInput(in,"utf-8");

//获取要解析的事件类型

int type=parser.getEventType();

//不得向下解析

while(type!=XmlPullParser.END_DOCUMENT){

switch(type){

case XmlPullParser.START_TAG://解析开始节点

//[6]具体判断一下是哪个标签

if("weather".equals(parser.getName())){

newsLists=new ArrayList<News>();

}else if("channel".equals(parser.getName())){

news=new News();

}else if("city".equals(parser.getName())){

news.setCity(parser.nextText());

}else if("temp".equals(parser.getName())){

news.setTemp(parser.nextText());

}else if("image".equals(parser.getName())){

news.setImage(parser.nextText());

}else if("wind".equals(parser.getName())){

news.setWind(parser.nextText());

}else if("pm250".equals(parser.getName())){

news.setPm250(parser.nextText());

}

break;

case XmlPullParser.END_TAG://解析结束标签

if("channel".equals(parser.getName())){

//把Javabean添加到集合

newsLists.add(news);

}

break;

}

//不停向下解析

type=parser.next();

}

return newsLists;

}

}

3,好了副class文件制作好了,就开始在mainactivity中制作正文了

package com.example.xinwen;


import android.os.Bundle;


import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.ProtocolException;

import java.net.URL;

import java.util.List;


import android.app.Activity;

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> newsLists;

private ListView lv;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.lv);

//[2]准备listview要显示的数据,去服务器取数据进行封装

initListData();

}

//准备listview的数据

private void initListData(){

new Thread(){


public void run(){

try {

//[2]去服务器取数据http://192.168.1.104:8080/weather.xml

String path="http://192.168.1.101:8080/weather.xml";

                            //小白强烈注意,192.168.1.101使用的是本地ip,至于如何查看本地ip 上网百度

//[2.2]创建URL 对象指定我们要访问的 网址(路径)

URL url = new URL(path);

//[2.3]拿到httpurlconnection对象  用于发送或者接收数据 

HttpURLConnection  conn = (HttpURLConnection) url.openConnection();

//[2.4]设置发送get请求 

conn.setRequestMethod("GET");//get要求大写  默认就是get请求

//[2.5]设置请求超时时间

conn.setConnectTimeout(5000);

//[2.6]获取服务器返回的状态码 

int code = conn.getResponseCode();

//[2.7]如果code == 200 说明请求成功

if(code==200){

//[2.8]获取服务器返回的数据   是以流的形式返回的  由于把流转换成字符串是一个非常常见的操作  所以我抽出一个工具类(utils)

InputStream in = conn.getInputStream(); 

newsLists = XmlPasser.parserXml(in);

runOnUiThread(new Runnable(){


@Override

public void run() {

// TODO 自动生成的方法存根

//更新ui把数据展示到子线程

lv.setAdapter(new MyAdapter());

}

});

}

} catch (Exception e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

};}.start();

}

private class MyAdapter extends BaseAdapter{


@Override

public int getCount() {

// TODO 自动生成的方法存根

return newsLists.size();

}


@Override

public Object getItem(int arg0) {

// TODO 自动生成的方法存根

return null;

}


@Override

public long getItemId(int arg0) {

// TODO 自动生成的方法存根

return 0;

}


@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view;

if(convertView==null){

view=View.inflate(getApplicationContext(), R.layout.item, null);

}else{

view =convertView;

}

//找到控件显示集合里面的数据

ImageView iv_icon=(ImageView) view.findViewById(R.id.iv_icon);

TextView tv_title=(TextView) view.findViewById(R.id.tv_title);

TextView tv_desc=(TextView) view.findViewById(R.id.tv_desc);

TextView tv_type=(TextView) view.findViewById(R.id.tv_type);

//展示数据

tv_title.setText(newsLists.get(position).getCity());

tv_desc.setText(newsLists.get(position).getTemp());

String typee=newsLists.get(position).getWind();

String comment=newsLists.get(position).getPm250();

int type=Integer.parseInt(typee);

switch(type){

case 1:

tv_type.setText(comment+"国内");

break;

case 2:

tv_type.setText("跟帖");

break;

case 3:

tv_type.setText("国外");

break;

}

return view;

}

}

}

至此src下的正文部分结束

我们接下来要来控制按钮这些内容了,在res-layout下创建一个子xml

<?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" >


    <ImageView

        android:id="@+id/iv_icon"

        android:layout_width="80dp"

        android:layout_height="80dp"

        android:src="@drawable/ic_launcher" />


    <TextView

        android:id="@+id/tv_title"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="3dp"

        android:layout_toRightOf="@+id/iv_icon"

        android:ellipsize="end"

        android:singleLine="true"

        android:text="sadasaddsasdasdada"

        android:textColor="#000000"

        android:textSize="18sp" />


    <TextView

        android:id="@+id/tv_desc"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_alignBottom="@+id/iv_icon"

        android:layout_below="@id/tv_title"

        android:layout_marginTop="6dp"

        android:layout_toRightOf="@id/iv_icon"

        android:ellipsize="end"

        android:maxLines="2"

        android:text="啊结果了敬爱个路口就爱看的两个件上的故事格式的公共的十大歌手大事"

        android:textColor="#999999"

        android:textSize="14sp" />


    <TextView

        android:id="@+id/tv_type"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignBottom="@id/iv_icon"

        android:layout_alignParentRight="true"

        android:layout_marginRight="3dp"

        android:text="跟帖"

        android:textColor="#ff0000"

        android:textSize="14sp" />


</RelativeLayout>

这样就制作成功了,最后勿忘给安卓adt一个上网许可(百度)





      本文转自眉间雪 51CTO博客,原文链接:http://blog.51cto.com/13348847/1979569,如需转载请自行联系原作者




相关文章
|
6月前
|
监控 搜索推荐 数据挖掘
电子邮件营销新风潮:五步高效撰写EDM文案
构建成功的EDM邮件营销策略涉及理解目标受众、设定营销目标、创建吸引人的主题、个性化内容和情感共鸣、强调价值点、以及持续测试和优化。了解受众特征和行为以定制文案,使用生动语言制造兴趣,通过个性化和情感化元素增强连接,突出产品优势并设置明确的行动号召。运用A/B测试评估文案效果,并监控数据以优化营销表现。Zoho Campaigns等工具可提供支持,包括模板、编辑器和A/B测试功能,助力打造高效邮件营销文案。
125 1
|
20天前
|
JSON 前端开发 搜索推荐
惊!这些前端技术竟然能让你的网站实现个性化推荐功能!
【10月更文挑战第30天】随着互联网技术的发展,个性化推荐已成为提升用户体验的重要手段。前端技术如JavaScript通过捕获用户行为数据、实时更新推荐结果等方式,在实现个性化推荐中扮演关键角色。本文将深入解析这些技术,并通过示例代码展示其实际应用。
52 4
|
20天前
|
前端开发 JavaScript 开发者
惊!这些前端技术竟然能让你的网站在社交媒体上疯传!
【10月更文挑战第30天】在这个信息爆炸的时代,社交媒体成为内容传播的重要渠道。本文介绍了前端开发者如何利用技术让网站内容在社交媒体上疯传,包括优化分享链接、创建引人注目的标题和描述、利用Open Graph和Twitter Cards、实现一键分享功能以及创造交互式内容。通过这些方法,提升用户分享意愿,使网站成为社交媒体上的热门话题。
31 2
|
3月前
|
缓存 自然语言处理 监控
聊一聊代购系统的一些见解
在全球化趋势下,跨境购物需求激增,催生了代购系统的兴起。本文全面剖析代购系统,展望其光明前景:随全球电商市场的扩张与消费者需求的增长,代购系统将持续进化,提供更优质的服务。文中详述了系统的使用流程,从注册登录到售后服务,确保用户享受无缝体验。此外,还强调了使用时应注意的问题,如数据合法性、安全性验证等。代购系统的优势在于其安全性、多语言支持、强大的支付功能及用户友好的设计。用户反馈正面,但仍有关于系统性能和翻译准确性的改进建议。最后,总结了常见问题及其解决方案,并强调持续优化系统的重要性,以满足未来市场和技术发展的需求。
|
6月前
|
安全 大数据 API
纵览2024年:排名靠前的项目管理软件一览!
2024年上半年项目管理软件排名揭晓,领头羊包括Zoho Projects、Microsoft Project、Nifty、Smartsheet和ClickUp。Zoho Projects因其易用性、扩展性和定制灵活性备受推崇,适合中小企业和大型企业。Microsoft Project以其与微软生态的无缝集成和丰富功能吸引用户。Nifty以其协作工具和弹性定价受青睐,适合中小团队。Smartsheet以其电子表格式界面和全面功能脱颖而出,而ClickUp则以高度自定义和协作功能闻名,适合需要全面任务管理的团队。
86 2
纵览2024年:排名靠前的项目管理软件一览!
小马识途谈新闻营销要怎么去做效果才会更好?
有的老板可能看不到新闻营销的直接回报,一直不乐意在此方面投入,但是却看到竞争对手一直在搞新闻营销,也就安排个PR做做新闻公关。小马识途营销顾问观察,自互联网诞生以来,新闻营销一直是网络营销工作中的一个重点。
114 8
|
数据采集 搜索推荐 安全
谷歌霸屏怎么做
答案是:可以使用GLB外推技术实现谷歌霸屏。
163 0
|
监控 算法 SEO
谷歌霸屏外推技术原理,谷歌留痕霸屏怎么做?
优化您的网站:对每个网站进行优化,包括关键字研究、元标记、内容优化和内部链接。
483 0
谷歌霸屏外推技术原理,谷歌留痕霸屏怎么做?
|
机器学习/深度学习 SEO 算法
内容化时代,SEO如何提升?阿里工程师揭秘新思路
随着内容化时代的到来,搜索引擎越来越重视站点页面的内容承载和丰富度。Alibaba.com作为服务买家和供应商的全球顶尖B类跨境贸易平台,在Google不断提升内容化排名的情况下,阿里工程师是如何突破原有SEO优化手段,提升电商平台的排名的呢?又是如何将人工智能知识应用在摘要内容的抽取过程中?
732 0
关于微博的几点看法,互联网营销
  微博很热,于是就产生了研究一下的想法,在体验了新浪微博和嘀咕等之后,有了以下几点看法,欢迎大家补充:   1. 微博源于手机短信,这也是为何微博要限制140个字符的原因,正好是两个短信的长度。如果说QQ/OICQ是互联网上的寻呼机,那微博就是互联网上的短信。
1471 0
下一篇
无影云桌面