在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一步步教你為網(wǎng)站開發(fā)Android客戶端

            一步步教你為網(wǎng)站開發(fā)Android客戶端

            作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

            Submit是查詢或重填,有 查 詢 和 重 填 兩種值

            至此,我們弄清楚了POST Data里所有內(nèi)容的含義和取值可能。但我們模擬POST請(qǐng)求為什么,其實(shí)就是為了得到搜索的書目信息,所以我們看一下返回的Content是不是我們要的東西

            果然,就是我們搜到的書目信息,就以String的形式放在Content里面。最后我們查看一下Stream,截圖,以防等下我們需要這里面的東西

            好了,這個(gè)頁(yè)面的工作原理我們已經(jīng)弄清楚了:用戶在網(wǎng)頁(yè)中輸入搜索內(nèi)容后,點(diǎn)擊查詢,瀏覽器會(huì)POST一個(gè)Data到目標(biāo)網(wǎng)址,該網(wǎng)址的返回信息就是搜到的書目。

            我們開始編寫代碼,模擬這個(gè)過程,先打開eclipse建立一個(gè)Java項(xiàng)目(注意是Java項(xiàng)目,因?yàn)镴ava項(xiàng)目可以完美移植到Android項(xiàng)目中且調(diào)試方便,并且模擬Http請(qǐng)求這一過程沒有用到任何Android功能)。

            導(dǎo)入HttpClient的4個(gè)包c(diǎn)ommons-codec、commons-httpclient、commons-logging、log4j。

            //實(shí)例化HttpClient

            HttpClient client = new HttpClient();

            //Stream頁(yè)面里面有Host地址 端口是80

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

            //用目標(biāo)地址 實(shí)例一個(gè)POST方法

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

            //將需要的鍵值對(duì)寫出來(lái)

            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方法加入上述鍵值對(duì)

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

            //執(zhí)行POST方法

            client.executeMethod(post);

            //將POST返回的數(shù)據(jù)以流的形式讀入,再把輸入流流至一個(gè)buff緩沖字節(jié)數(shù)組

            //StreamTool類是我自己寫的一個(gè)工具類,其內(nèi)容將在下文附出

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

            //將返回的內(nèi)容格式化為String存在html中

            String html = new String(buff);

            //任務(wù)完成了,釋放連接

            post.releaseConnection();

            //StreamTool類如下

            public class StreamTool {

            /**

            * 從輸入流中獲取數(shù)據(jù)

            * @param inputStream 輸入流

            * @return 字節(jié)數(shù)組

            * @throws Exception

            */

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

            {

            //實(shí)例化一個(gè)輸出流

            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

            //一個(gè)1024字節(jié)的緩沖字節(jié)數(shù)組

            byte[] buffer = new byte[1024];

            int len = 0;

            //讀流的基本知識(shí)

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

            outputStream.write(buffer, 0, len);

            }

            //用完要關(guān),大家都懂的

            inputStream.close();

            return outputStream.toByteArray();

            }

            }

            現(xiàn)在,我們得到了POST方法返回的String,我們輸出到控制臺(tái)看看是什么

            System.out.println(html);

            沒錯(cuò),就是我們上文看到的HttpWatch 抓到的返回Content,也就是一段HTML代碼,這說明,我們模擬瀏覽器POST請(qǐng)求成功了!

            我們?cè)僭囋噭e的搜索內(nèi)容,來(lái)一個(gè)”android開發(fā)”(即將v_value鍵值對(duì)的值改成”android開發(fā)”),這時(shí)運(yùn)行后,我們卻從控制臺(tái)得到了這樣的結(jié)果:

            經(jīng)過幾次試驗(yàn)后,發(fā)現(xiàn)一個(gè)規(guī)律,只要搜索內(nèi)容中包括中文,就搜不到。

            所以可以判定是中文編碼的問題,(在開發(fā)這類客戶端時(shí)候,中文編碼往往是個(gè)很具困難的問題。安卓巴士開發(fā)3群的某群友提到:服務(wù)器交流用的編碼是”ISO-8859-1”,跟我起初用到的編碼一致,但真實(shí)性仍需考證)所以我們修改上面的代碼,將代表搜索內(nèi)容的v_value對(duì)應(yīng)的值編碼為”ISO-8859-1”

            就將上段代碼中的

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

            改為

            NameValuePair vValue = new NameValuePair(v_value , new String(“android開發(fā)”.getBytes(),ISO-8859-1));



            關(guān)鍵詞:

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉