一般app客户端需要数据的时候,如果有搭建服务器,可以通过网络请求后台提供的接口或者公开免费的数据平台,请求返回一般是json数据,解析以后展示出来。
但是如果想要获取某个网页上的数据的时候怎么办呢?这个时候就可以通过Jsoup来搞定了。
1.首先导包,下载jsoup-1.8.1.jar包,然后添加到lib中。
2.找一个你喜欢的网页,比如在Chrome浏览器,选择你想要的数据右键,检查,就可以招到想对应的html块,比如我找到了一个学校的新闻版块,如下。
<div class="newslist">
<ul>
<li><span>[2016-12-29]</span><a href="news_info7549.html" title="我校举行2016级新生军训动员大会">我校举行2016级新生军训动员大会</a></li>
<li><span>[2016-12-21]</span><a href="news_info7528.html" title="我校师生参加泉州市委宣讲团学习贯彻省第十次党代会精神报告会">我校师生参加泉州市委宣讲团学习贯彻省第十次党代会精神报告会</a></li>
<li><span>[2016-12-16]</span><a href="news_info7511.html" title="我校举行首届“互联网+”创意设计大赛">我校举行首届“互联网+”创意设计大赛</a></li>
<li><span>[2016-12-13]</span><a href="news_info7509.html" title="我校举行首届思政课课外实践与调研成果展示大赛">我校举行首届思政课课外实践与调研成果展示大赛</a></li>
<li><span>[2016-12-12]</span><a href="news_info7454.html" title="我校开展“携手抗艾,重在预防”系列活动">我校开展“携手抗艾,重在预防”系列活动</a></li>
<li><span>[2016-12-12]</span><a href="news_info7449.html" title="我校举行2017届毕业生大型综合校园招聘会">我校举行2017届毕业生大型综合校园招聘会</a></li>
<li><span>[2016-12-09]</span><a href="news_info7427.html" title="我校党委举行学习党的六中全会精神暨部署期末党建工作会议">我校党委举行学习党的六中全会精神暨部署期末党建工作会议</a></li>
<li><span>[2016-12-07]</span><a href="news_info7426.html" title="我校与福建众益太阳能科技股份公司举行校企合作签约仪式">我校与福建众益太阳能科技股份公司举行校企合作签约仪式</a></li>
<li><span>[2016-12-07]</span><a href="news_info7425.html" title="我校举办大学生疾病预防与急救知识专题讲座">我校举办大学生疾病预防与急救知识专题讲座</a></li>
<li><span>[2016-12-06]</span><a href="news_info7392.html" title="我校举办2016年度志愿服务总结表彰暨青年志愿者协会成立十周年庆典晚会">我校举办2016年度志愿服务总结表彰暨青年志愿者协会成立十周年庆典晚会</a></li>
</ul>
</div>
3.封装爬取到的信息,并且建一个集合作为存储。
在子线程中去操作,当存储信息的集合“装好了以后”,通过Handler去发送消息到主线程,通知适配器绑定数据到ListView。
代码如下
public class MnustNews {
public String url;
public String title;
public String date;
}
new Thread(new Runnable() {
@Override
public void run() {
try {
Document doc = Jsoup.connect("http://www.mnust.cn/news.html").get();
Elements links = doc.select("div.newslist").select("li");
for (Element e:links){
Log.i("MYNEWS", "详情链接:" + e.select("a").attr("href"));
Log.i("MYNEWS", "标题:" + e.select("a").attr("title"));
Log.i("MYNEWS", "时间:" + e.select("span").text());
MnustNews news = new MnustNews();
news.url = URL + links.select("a").attr("href");
news.title = links.select("a").attr("title");
news.date = links.select("span").text();
newsList.add(news);
}
handler.sendEmptyMessage(666);
Log.i("MYNEWS","NewsList大小:"+newsList.size());
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what==666){ listView.setAdapter(new MyAdapter(newsList,MainActivity.this)); } } };
4.最后可以通过重新ListView的item点击事件,打开对应的网页,有两种办法,一种是可以使用WebView,一种是使用浏览器的方式(这边使用的是后者)
Uri uri = Uri.parse(newsList.get(i).url);
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
以上就是Jsoup的基本使用了,其中要注意点是
1.在清单文件中添加网络权限
2.这个操作需要在子线程中去
Document doc = Jsoup.connect("http://www.mnust.cn/news.html").get();
当然了上面也可以不用Handler,可以使用AsnycTask。
关于难一点的是,因为没有怎么接触过html,所以关于解析方面还是有挺大的问题。
附上Jsoup的api地址