一步步教你为网站开发Android客户端
这时再运行,控制台成功输出以” android开发”为关键字的Content。
至此,我们POST请求才真正完成。 观察控制台的HTML后发现,我们需要的书目信息就在里面,只不过被一些HTML标签包裹住了,下一步我们就要解放这些信息,存储到容器里。
这里我们要用到Jsoup,一个Java开源HTML解析器(来自org.jsoup包)。
我们直接上代码,逐行解释(大家最好对应上面的HTML代码来理解)
首先我们建一个容器来装这些解析到的数据,由于我的项目是将这些数据以ListView呈现给用户,而ListView的数据是由Adapter提供,Adapter需要传一个特殊容器-包含HashMap的ArrayList(Android基础知识)
//所以有
List
//开始使用Jsoup
//Jsoup支援一个Document类 将刚才的html转化成Document
Document document = Jsoup.parse(html);
//一个Document又由elements组成 我们选择”tr”开头的标签,存入 trs元素群中
Elements trs = document.select(tr);
//得到整个HTML中包含tr的标签的个数
int totalTrs = trs.size();
//我们可以观察上面没有搜索结果的那个HTML。发现,如果totalTrs=3就表示没结果。
//只要有书目结果totalTrs必定大于3,于是
if(totalTrs > 3)
for(int i = 0;i totalTrs – 3;i++)
{
//观察HTML,从第i+2个tr开始,包含的才是我们要的书目信息
//我们从每个tr中选出td标签元素群
Elements tds = trs.get(i + 2).select(td);
//得到每个tr中td的个数
int totalTds = tds.size();
//一个临时的HashMap,里面是String-Object键值对
Map
//j是一个标识数
for(int j =0;j totalTds ;j++)
{
switch (j) {
//0表示第一个,即书名
//put方法即向map加入一条键值对
//html()方法就得到标签括起来的内容
case 0:
map.put(book_title, tds.get(j).html().toString());
break;
case 1:
//1表示第二个,即作者
map.put(book_author, tds.get(j).html().toString());
break;
case 2:
//2表示第三个,即出版信息
map.put(book_press, tds.get(j).html().toString());
break;
case 3:
//3表示第四个,即页数
map.put(book_page, tds.get(j).html().toString());
break;
case 4:
//4表示第五个,即价格
map.put(book_price, tds.get(j).html().toString());
break;
case 5:
//5表示第六个,即索取号
map.put(book_noFor, tds.get(j).html().toString());
break;
case 6:
//6表示第七个,即那段网址
//那段网址td中又包含一个a标签,a标签的href属性的值就是网址
//attr(“href”)可以返回href属性的值
map.put(book_detail, tds.get(j).select(a).attr(href).toString());
break;
default:
break;
}
}
list.add(map);
}
list就是我们需要的ArrayList啦
上面所有代码调通后,我们只需一些简单的复制粘贴,就可以放在我们的Android工程中,加上一段简单的代码就可以让ListView显示这个ArrayList。(由于没有任何技术含量,以及该项目暂未上线,此段代码不予以展示,敬请谅解)
接下来,我们一个页面最多只包含10个书目信息,而我们校图书馆,光以”Java”为关键字的书就超过1000本,怎么来显示完全呢,一次显示所有的书肯定不现实。首先数据量太大,手机无法承受;消耗流量过大,用户体验极差。所以,我们就需要ListView能够动态加载数据,即一开始显示十项,如果用户此时拉动ListView显示完十项之后,自动联网,再加载十项(如果还有十项的话),这样的用户体验会非常顺畅。
这个功能的核心是,我们的ListView需要实现OnScrollListener接口。
如果你的ListView所在的Activity继承的是ListActivity的话,只需在extends ListActivity后面加上implements OnScrollListener,这时你需要复写onScroll和onScrollStateChanged。如果你的ListView是从XMLgetView 得到的,你只需为它setOnScrollListener,也会需要你复写onScroll和onScrollStateChanged。
不管你用哪种方法,我们只用修改onScroll方法
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
//关键的判断代码,这句话表示用户将ListView拉至最底部
if(firstVisibleItem + visibleItemCount == totalItemCount)
//你只需要把继续得到下面十项的代码写在这里,就可以实现上述功能了。
//同样再使用一次POST方法,不再赘述
//代码由于同样原因不予以展示,敬请谅解
至此,文章开头的几个知识点已经全部讲解完毕,时间仓促,事物繁忙,可能会影响文章质量,还请大家多多包涵。 如果有问题,可以直接回帖、发论坛信息或通过Email:anliupeinye@gmail.com联系我。
项目成品展示:

看看这些信息是不是就是上面用网页以android为关键字搜索到的?
评论