<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          這時(shí)再運(yùn)行,控制臺(tái)成功輸出以” android開發(fā)”為關(guān)鍵字的Content。

          至此,我們POST請(qǐng)求才真正完成。 觀察控制臺(tái)的HTML后發(fā)現(xiàn),我們需要的書目信息就在里面,只不過被一些HTML標(biāo)簽包裹住了,下一步我們就要解放這些信息,存儲(chǔ)到容器里。

          這里我們要用到Jsoup,一個(gè)Java開源HTML解析器(來自org.jsoup包)。

          我們直接上代碼,逐行解釋(大家最好對(duì)應(yīng)上面的HTML代碼來理解)

          首先我們建一個(gè)容器來裝這些解析到的數(shù)據(jù),由于我的項(xiàng)目是將這些數(shù)據(jù)以ListView呈現(xiàn)給用戶,而ListView的數(shù)據(jù)是由Adapter提供,Adapter需要傳一個(gè)特殊容器-包含HashMap的ArrayList(Android基礎(chǔ)知識(shí))

          //所以有

          List

          //開始使用Jsoup

          //Jsoup支援一個(gè)Document類 將剛才的html轉(zhuǎn)化成Document

          Document document = Jsoup.parse(html);

          //一個(gè)Document又由elements組成 我們選擇”tr”開頭的標(biāo)簽,存入 trs元素群中

          Elements trs = document.select(tr);

          //得到整個(gè)HTML中包含tr的標(biāo)簽的個(gè)數(shù)

          int totalTrs = trs.size();

          //我們可以觀察上面沒有搜索結(jié)果的那個(gè)HTML。發(fā)現(xiàn),如果totalTrs=3就表示沒結(jié)果。

          //只要有書目結(jié)果totalTrs必定大于3,于是

          if(totalTrs > 3)

          for(int i = 0;i totalTrs – 3;i++)

          {

          //觀察HTML,從第i+2個(gè)tr開始,包含的才是我們要的書目信息

          //我們從每個(gè)tr中選出td標(biāo)簽元素群

          Elements tds = trs.get(i + 2).select(td);

          //得到每個(gè)tr中td的個(gè)數(shù)

          int totalTds = tds.size();

          //一個(gè)臨時(shí)的HashMap,里面是String-Object鍵值對(duì)

          Map

          //j是一個(gè)標(biāo)識(shí)數(shù)

          for(int j =0;j totalTds ;j++)

          {

          switch (j) {

          //0表示第一個(gè),即書名

          //put方法即向map加入一條鍵值對(duì)

          //html()方法就得到標(biāo)簽括起來的內(nèi)容

          case 0:

          map.put(book_title, tds.get(j).html().toString());

          break;

          case 1:

          //1表示第二個(gè),即作者

          map.put(book_author, tds.get(j).html().toString());

          break;

          case 2:

          //2表示第三個(gè),即出版信息

          map.put(book_press, tds.get(j).html().toString());

          break;

          case 3:

          //3表示第四個(gè),即頁(yè)數(shù)

          map.put(book_page, tds.get(j).html().toString());

          break;

          case 4:

          //4表示第五個(gè),即價(jià)格

          map.put(book_price, tds.get(j).html().toString());

          break;

          case 5:

          //5表示第六個(gè),即索取號(hào)

          map.put(book_noFor, tds.get(j).html().toString());

          break;

          case 6:

          //6表示第七個(gè),即那段網(wǎng)址

          //那段網(wǎng)址td中又包含一個(gè)a標(biāo)簽,a標(biāo)簽的href屬性的值就是網(wǎng)址

          //attr(“href”)可以返回href屬性的值

          map.put(book_detail, tds.get(j).select(a).attr(href).toString());

          break;

          default:

          break;

          }

          }

          list.add(map);

          }

          list就是我們需要的ArrayList啦

          上面所有代碼調(diào)通后,我們只需一些簡(jiǎn)單的復(fù)制粘貼,就可以放在我們的Android工程中,加上一段簡(jiǎn)單的代碼就可以讓ListView顯示這個(gè)ArrayList。(由于沒有任何技術(shù)含量,以及該項(xiàng)目暫未上線,此段代碼不予以展示,敬請(qǐng)諒解)

          接下來,我們一個(gè)頁(yè)面最多只包含10個(gè)書目信息,而我們校圖書館,光以”Java”為關(guān)鍵字的書就超過1000本,怎么來顯示完全呢,一次顯示所有的書肯定不現(xiàn)實(shí)。首先數(shù)據(jù)量太大,手機(jī)無法承受;消耗流量過大,用戶體驗(yàn)極差。所以,我們就需要ListView能夠動(dòng)態(tài)加載數(shù)據(jù),即一開始顯示十項(xiàng),如果用戶此時(shí)拉動(dòng)ListView顯示完十項(xiàng)之后,自動(dòng)聯(lián)網(wǎng),再加載十項(xiàng)(如果還有十項(xiàng)的話),這樣的用戶體驗(yàn)會(huì)非常順暢。

          這個(gè)功能的核心是,我們的ListView需要實(shí)現(xiàn)OnScrollListener接口。

          如果你的ListView所在的Activity繼承的是ListActivity的話,只需在extends ListActivity后面加上implements OnScrollListener,這時(shí)你需要復(fù)寫onScroll和onScrollStateChanged。如果你的ListView是從XMLgetView 得到的,你只需為它setOnScrollListener,也會(huì)需要你復(fù)寫onScroll和onScrollStateChanged。

          不管你用哪種方法,我們只用修改onScroll方法

          @Override

          public void onScroll(AbsListView view, int firstVisibleItem,

          int visibleItemCount, int totalItemCount) {

          // TODO Auto-generated method stub

          //關(guān)鍵的判斷代碼,這句話表示用戶將ListView拉至最底部

          if(firstVisibleItem + visibleItemCount == totalItemCount)

          //你只需要把繼續(xù)得到下面十項(xiàng)的代碼寫在這里,就可以實(shí)現(xiàn)上述功能了。

          //同樣再使用一次POST方法,不再贅述

          //代碼由于同樣原因不予以展示,敬請(qǐng)諒解

          至此,文章開頭的幾個(gè)知識(shí)點(diǎn)已經(jīng)全部講解完畢,時(shí)間倉(cāng)促,事物繁忙,可能會(huì)影響文章質(zhì)量,還請(qǐng)大家多多包涵。 如果有問題,可以直接回帖、發(fā)論壇信息或通過Email:anliupeinye@gmail.com聯(lián)系我。

          項(xiàng)目成品展示:

          看看這些信息是不是就是上面用網(wǎng)頁(yè)以android為關(guān)鍵字搜索到的?


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();