关闭

news for Android

46人阅读 评论(0) 收藏 举报

步骤一:activity_main.xml 添加ListView

<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="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.itcast.wh17.netnews.MainActivity" >

<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

</RelativeLayout>

 步骤二:MainActivity.java 获取控件

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1、获取ListView
listView = (ListView) findViewById(R.id.lv);}

步骤三:NewsInfo.java  设置bean

public class NewsInfo {
private String id;
private String title;
private String content;
private String image;
public NewsInfo() {
super();
// TODO Auto-generated constructor stub
}
public NewsInfo(String id, String title, String content, String image) {
super();
this.id = id;
this.title = title;
this.content = content;
this.image = image;
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the title
*/
public String getTitle() {
return title;
}
/**
* @param title the title to set
*/
public void setTitle(String title) {
this.title = title;
}
/**
* @return the content
*/
public String getContent() {
return content;
}
/**
* @param content the content to set
*/
public void setContent(String content) {
this.content = content;
}
/**
* @return the image
*/
public String getImage() {
return image;
}
/**
* @param image the image to set
*/
public void setImage(String image) {
this.image = image;
}}

步骤四:items.XML 设置items文件

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


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

<TextView 
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_image"
android:textSize="20sp"
android:singleLine="true"
android:text="hello"
/>

<TextView 
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_image"
android:layout_below="@id/tv_title"
android:lines="2"
android:textColor="@android:color/darker_gray"
android:text="world"
/>

</RelativeLayout>

步骤五:MyAdapter.java  设置适配器

import java.util.List;

import com.loopj.android.image.SmartImageView;

import cn.itcast.wh17.netnews.R;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import cn.itcast.wh17.netnews.bean.NewsInfo;

public class MyAdapter extends BaseAdapter {

private List<NewsInfo> newList;
private Context context;

public MyAdapter(List<NewsInfo> newList, Context context) {
super();
this.newList = newList;
this.context = context;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return newList.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view=null;
if (convertView==null) {
view=View.inflate(context, R.layout.items, null);
}else{
view=convertView; 
}

//获取数据
NewsInfo newsInfo = newList.get(position);
//获取控件
SmartImageView iv_image = (SmartImageView) view.findViewById(R.id.iv_image);
TextView tv_title = (TextView) view.findViewById(R.id.tv_title);
TextView tv_content = (TextView) view.findViewById(R.id.tv_content);

iv_image.setImageUrl(newsInfo.getImage()); 
tv_title.setText(newsInfo.getTitle());
tv_content.setText(newsInfo.getContent());


return view;
}

}

步骤六:MainActivity.java 下载xml文件

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1、获取ListView
listView = (ListView) findViewById(R.id.lv);


// 1、xml-->网络-->tomcat
// 网络代码
// 第一步:开权限、开线程

new Thread(new Runnable() {

@Override
public void run() {
String path = "http://10.0.2.2:8088/hello//news.xml";
// 第二步:
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);

if (connection.getResponseCode() == 200) {
// inputStream===>news.xml
InputStream inputStream = connection.getInputStream();
// xml的解析
List<NewsInfo> newInfoList = readXML(inputStream);//未完成,下面继续

步骤七:定义 rendXML方法

public List<NewsInfo> readXML(InputStream inputStream) {
List<NewsInfo> newList = null;
NewsInfo info = null;
XmlPullParser pullParser = Xml.newPullParser();
try {
pullParser.setInput(inputStream, "utf-8");

int eventType = pullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {

switch (eventType) {
case XmlPullParser.START_TAG:

if (pullParser.getName().equals("news")) {
// 创建集合
newList = new ArrayList<NewsInfo>();

} else if (pullParser.getName().equals("new")) {
info = new NewsInfo();
info.setId(pullParser.getAttributeValue(0));

} else if (pullParser.getName().equals("tilte")) {
info.setTitle(pullParser.nextText());

} else if (pullParser.getName().equals("content")) {
info.setContent(pullParser.nextText());
} else if (pullParser.getName().equals("image")) {
info.setImage(pullParser.nextText());
}
break;

case XmlPullParser.END_TAG:
if (pullParser.getName().equals("new")) {
// 添加元素
newList.add(info);

}
break;

default:
break;
}

eventType = pullParser.next();
}

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

return newList;

}

步骤八:得到刚刚的一个集合后,发送消息

//接着刚刚断点继续

Message message = Message.obtain();
message.what = SUCCESS_DOWNLOAD_XML;
message.obj = newInfoList;

mHandler.sendMessage(message);

}

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

}
}).start();

}

步骤九:new Handler(){};

Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS_DOWNLOAD_XML:

List<NewsInfo> newList=(List<NewsInfo>) msg.obj;
//ge 
MyAdapter adapter = new MyAdapter(newList, MainActivity.this);
listView.setAdapter(adapter);
break; 
default:
break;
}

};
};

总体思路:用网络代码下载XML解析,将数据用消息机制发送给适配器,适配器将数据、布局整合后set到ListView

用到的image view 工具

android-smart-image-view-master  jar包

0
0
查看评论

论文读书笔记-google news personalization: scalable online collaborative filtering

简介:这篇论文介绍了google news推荐系统的实现。在用户量很大的前提下,原有的推荐算法适用性较差,需要对其进行改进,例如使用mapreduce,bigtable等技术提高运算速度,综合考虑多种推荐算法等等。   下面是一些要点: 1、处理google ne...
  • jj12345jj198999
  • jj12345jj198999
  • 2013-10-12 17:09
  • 3780

GeekNews

GeekNews
  • u014608640
  • u014608640
  • 2016-09-18 09:55
  • 2437

Hacker News的排名算法

从dbanotes.net的startup news知道了hacker news,关注了一段时间,发现排名确实能反映绝大多数用户的喜好,并且也不至于让比较热的文章永远出现在前列,而导致没有新的内容被关注。因此对其算法比较好奇,在网络上搜索了一下,看到实际的算法,有点不敢相信,整个系统只需要依赖这样一...
  • adparking
  • adparking
  • 2016-12-27 11:36
  • 738

JSP/FreeMarker生成RSS

 RSS2.0在网络上大行其道,各种网站都加上RSS支持,关于RSS规范,可以浏览一下 http://blogs.law.harvard.edu/tech/rss在计划生成RSS文件的时候,顺便搜索了一下JIRA和Confluence的程序,发现它们分别是用模板方式和JSP动态页...
  • cailiang517502214
  • cailiang517502214
  • 2009-12-22 11:31
  • 636

【转载】论文读书笔记-personalized news recommendation based on click behavior

比较经典的论文,有时候想起来,想再看看,总是不知道放哪儿了。索性放到blog上,随时查阅。 论文分享链接:http://pan.baidu.com/s/1o7eroxW 还有一篇别人的阅读笔记,挺好的。出处:http://www.aiuxian.com/article/p-334...
  • xceman1997
  • xceman1997
  • 2016-02-13 18:05
  • 5780

<第二行代码>中的新闻应用

这个应用分五个部分 1.News类 2.内容碎片及布局 3.内容活动及布局 4.标题碎片及布局 5.主活动及布局   由于会用到recyclerview,所以先添加依赖库 compile 'com.android.support:recyclerview-v7:24...
  • oeaaa_222
  • oeaaa_222
  • 2017-05-19 11:13
  • 216

【每周一文】Googles News Personalization:Scalable Online Collaborative Filtering(2007)

概述 最近因工作需要调研一下对大规模数据如何进行有效用户聚类,发现google之前论文做过相关事情。 该文从工程实现角度介绍了一种通用的在线推荐架构,可以适用于大规模数据和实时推荐。该文提到模型通过三种方式进行推荐1)MinHash 聚类2)PLSI 3)共现 问题 问题:根据用户对...
  • fangqingan_java
  • fangqingan_java
  • 2016-03-15 23:50
  • 474

google news recommendation - 基于点击行为的用户个性化新闻推荐

1 摘要 2 简介 新闻阅读,随着互联网的发展,访问方式已经从订阅纸质媒体扩展到访问数目众多的网络新闻源。新闻聚集网站如google news、yahoo news,从不同的新闻网站采集数据,并提供一个聚合的视图。对于这样的新闻服务网站来说,一个严重的问题是文章的数目对于用户来说是巨大的...
  • Erli11
  • Erli11
  • 2014-07-30 16:22
  • 3672

碎片的最佳实践——一个简易版的新闻应用

现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有些欠缺,因此又该进入最佳实践环节了。         前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间不能充分利用的问题。那是不...
  • u013678930
  • u013678930
  • 2016-03-09 15:17
  • 1665

Android-MVP+Retrofit+Rxjava实现一个知乎日报客户端

使用MVP+Retrofit+Rxjava实现一个知乎日报客户端,界面基于Material design,还没有全部完成orz,,放假太懒效果图开源项目 name introduction butterknife Annotate fields with @BindView and a...
  • linsawako
  • linsawako
  • 2017-01-31 16:27
  • 3566
    个人资料
    • 访问:132次
    • 积分:30
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档