J2ME Http串連例子

來源:互聯網
上載者:User

以下載一張小圖片為例子,一個較為簡單的HTTP串連的demo。

支援CMNET及CMWAP兩種不同的接入方式,以及在CMWAP接入方式下,過濾移動資費頁面。

在6120c上測試通過。

註:若存取點選擇錯誤,可能導致過長時間的等待

 

import java.io.IOException;<br />import java.io.InputStream;<br />import javax.microedition.io.Connector;<br />import javax.microedition.io.HttpConnection;<br />import javax.microedition.lcdui.Command;<br />import javax.microedition.lcdui.CommandListener;<br />import javax.microedition.lcdui.Display;<br />import javax.microedition.lcdui.Displayable;<br />import javax.microedition.lcdui.Form;<br />import javax.microedition.lcdui.Image;<br />import javax.microedition.lcdui.StringItem;<br />import javax.microedition.midlet.MIDlet;</p><p>/**<br /> * HttpDemo<br /> *<br /> * @author kf156(亞日)<br /> *<br /> */<br />public class HttpTest extends MIDlet implements CommandListener, Runnable {<br />public static final byte WAIT = 0;// 等待</p><p>public static final byte CONNECT = 1;// 串連中</p><p>public static final byte SUCCESS = 2;// 成功</p><p>public static final byte FAIL = 3;// 失敗</p><p>int state;// 目前狀態</p><p>Display display = Display.getDisplay(this);</p><p>Form form = new Form("HttpTest");</p><p>boolean cmnet = true;// 存取點為cmnet還是cmwap</p><p>StringBuffer sb = new StringBuffer("當前接入方式為:CMNET/n");</p><p>StringItem si = new StringItem(null, sb.toString());</p><p>Command connect = new Command("連網", Command.OK, 1);</p><p>Command change = new Command("改變存取點方式", Command.OK, 2);</p><p>Command exit = new Command("退出", Command.EXIT, 1);</p><p>HttpConnection http;</p><p>String host = "wiki.huihoo.com";</p><p>String path = "/images/9/9c/Java.gif";</p><p>public HttpTest() {<br />state = WAIT;// 等待狀態<br />form.append(si);<br />form.addCommand(connect);<br />form.addCommand(change);<br />form.addCommand(exit);<br />form.setCommandListener(this);<br />}</p><p>protected void destroyApp(boolean b) {</p><p>}</p><p>protected void pauseApp() {</p><p>}</p><p>protected void startApp() {<br />display.setCurrent(form);<br />}</p><p>public void commandAction(Command c, Displayable d) {<br />if (c == change) {// 改變存取點<br />if (isConnect())<br />return;</p><p>cmnet = !cmnet;<br />form.deleteAll();<br />sb.delete(0, sb.length());<br />addStr("當前接入方式為:" + (cmnet ? "CMNET" : "CMWAP"));<br />form.append(si);</p><p>} else if (c == connect) {// 連網<br />if (isConnect())<br />return;<br />new Thread(this).start();</p><p>} else if (c == exit) {// 退出<br />destroyApp(true);<br />notifyDestroyed();</p><p>}</p><p>}</p><p>public void run() {<br />form.deleteAll();<br />sb.delete(0, sb.length());<br />addStr("當前接入方式為:" + (cmnet ? "CMNET" : "CMWAP"));<br />form.append(si);</p><p>state = CONNECT;<br />addStr("網路連接中...");<br />InputStream is = null;<br />try {<br />String url = null;<br />url = cmnet ? ("http://" + host + path)<br />: ("http://10.0.0.172:80" + path);<br />http = (HttpConnection) Connector.open(url, Connector.READ_WRITE,<br />true);<br />if (!cmnet)<br />http.setRequestProperty("X-Online-Host", host);</p><p>http.setRequestMethod(HttpConnection.GET);</p><p>String contentType = http.getHeaderField("Content-Type");<br />System.out.println(contentType);<br />addStr(contentType);</p><p>if (contentType != null<br />&& contentType.indexOf("text/vnd.wap.wml") != -1) {// 過濾移動資費頁面<br />addStr("移動資費頁面,過濾!");<br />http.close();<br />http = null;<br />http = (HttpConnection) Connector.open(url,<br />Connector.READ_WRITE, true);<br />if (!cmnet)<br />http.setRequestProperty("X-Online-Host", host);<br />http.setRequestMethod(HttpConnection.GET);<br />contentType = http.getHeaderField("Content-Type");<br />}<br />addStr("Content-Type=" + contentType);</p><p>int code = http.getResponseCode();<br />addStr("HTTP Code :" + code);</p><p>if (code == 200) {<br />addStr("網路連網成功,接收資料...");<br />is = http.openInputStream();</p><p>Image image = Image.createImage(is);<br />addStr("資料接收完畢,顯示圖片");<br />form.append(image);<br />// 普通位元組資料接收<br />// byte[] b = new byte[1024];<br />// int len = 0;<br />// ByteArrayOutputStream baos = new ByteArrayOutputStream();<br />// DataOutputStream dos = new DataOutputStream(baos);<br />// while ((len = is.read(b)) != -1) {<br />// dos.write(b, 0, len);<br />// }<br />// dos.close();<br />// dos = null;<br />// is.close();<br />// is = null;<br />state = SUCCESS;<br />return;<br />} else {<br />addStr("訪問頁面失敗");<br />}<br />} catch (IOException e) {<br />addStr("連網發生異常:" + e.toString());<br />e.printStackTrace();</p><p>} catch (Exception e) {<br />addStr("發生異常:" + e.toString());<br />e.printStackTrace();</p><p>} finally {<br />if (is != null) {<br />try {<br />is.close();<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />is = null;<br />}</p><p>if (http != null)<br />try {<br />http.close();<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />http = null;<br />}<br />state = FAIL;<br />}</p><p>/**<br /> * 判斷是否正在串連<br /> *<br /> * @return<br /> */<br />private boolean isConnect() {<br />if (state == CONNECT) {<br />addStr("網路連接中,請稍候...");<br />return true;<br />}<br />return false;<br />}</p><p>/**<br /> * 添加文字<br /> *<br /> * @param str<br /> * 要添加的文字<br /> */<br />private void addStr(String str) {<br />sb.append(str + "/n");<br />si.setText(sb.toString());<br />}<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.