微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一步步教你为网站开发Android客户端

一步步教你为网站开发Android客户端

时间:10-08 来源:互联网 点击:

am页面里面有Host地址 端口是80

client.getHostConfiguration().setHost(http://coin.lib.scuec.edu.cn, 80);

//用目标地址 实例一个POST方法

PostMethod post = new PostMethod(http://coin.lib.scuec.edu.cn/cgi-bin/IlaswebBib);

//将需要的键值对写出来

NameValuePair beg = new NameValuePair(FLD_DAT_BEG , “”);

NameValuePair end = new NameValuePair(FLD_DAT_END , “”);

NameValuePair submit = new NameValuePair(submit , 查询));

NameValuePair vIndex = new NameValuePair(v_index , “TITLE”);

NameValuePair vLogicSrch = new NameValuePair(v_LogicSrch , 0);

NameValuePair vPagenum = new NameValuePair(v_pagenum , 10);

NameValuePair vSeldatabase = new NameValuePair(v_seldatabase , 0);

NameValuePair vValue = new NameValuePair(v_value ,”android”);

//给POST方法加入上述键值对

post.setRequestBody(new NameValuePair[] {beg , end , submit , vIndex , vLogicSrch , vPagenum , vSeldatabase , vValue});

//执行POST方法

client.executeMethod(post);

//将POST返回的数据以流的形式读入,再把输入流流至一个buff缓冲字节数组

//StreamTool类是我自己写的一个工具类,其内容将在下文附出

byte[] buff = StreamTool.readInputStream(post.getResponseBodyAsStream());

//将返回的内容格式化为String存在html中

String html = new String(buff);

//任务完成了,释放连接

post.releaseConnection();

//StreamTool类如下

public class StreamTool {

/**

* 从输入流中获取数据

* @param inputStream 输入流

* @return 字节数组

* @throws Exception

*/

public static byte[] readInputStream(InputStream inputStream) throws Exception

{

//实例化一个输出流

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

//一个1024字节的缓冲字节数组

byte[] buffer = new byte[1024];

int len = 0;

//读流的基本知识

while ((len=inputStream.read(buffer)) != -1) {

outputStream.write(buffer, 0, len);

}

//用完要关,大家都懂的

inputStream.close();

return outputStream.toByteArray();

}

}

现在,我们得到了POST方法返回的String,我们输出到控制台看看是什么

System.out.println(html);

没错,就是我们上文看到的HttpWatch 抓到的返回Content,也就是一段HTML代码,这说明,我们模拟浏览器POST请求成功了!

我们再试试别的搜索内容,来一个”android开发”(即将v_value键值对的值改成”android开发”),这时运行后,我们却从控制台得到了这样的结果:

经过几次试验后,发现一个规律,只要搜索内容中包括中文,就搜不到。

所以可以判定是中文编码的问题,(在开发这类客户端时候,中文编码往往是个很具困难的问题。安卓巴士开发3群的某群友提到:服务器交流用的编码是”ISO-8859-1”,跟我起初用到的编码一致,但真实性仍需考证)所以我们修改上面的代码,将代表搜索内容的v_value对应的值编码为”ISO-8859-1”

就将上段代码中的

NameValuePair vValue = new NameValuePair(v_value ,”android”);

改为

NameValuePair vValue = new NameValuePair(v_value , new String(“android开发”.getBytes(),ISO-8859-1));

这时再运行,控制台成功输出以” 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();

//我们可以观察上面没有搜索结果的那

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top