日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

J2ME最佳实践之联网开发-编写反应灵敏的联网提示界面

發(fā)布時間:2023/11/30 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J2ME最佳实践之联网开发-编写反应灵敏的联网提示界面 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于無線設(shè)備所能支持的網(wǎng)絡(luò)協(xié)議非常有限,僅限于HTTP,Socket,UDP等幾種協(xié)議,不同的廠家可能還支持其他網(wǎng)絡(luò)協(xié)議,但是,MIDP 1.0規(guī)范規(guī)定,HTTP協(xié)議是必須實現(xiàn)的協(xié)議,而其他協(xié)議的實現(xiàn)都是可選的。因此,為了能在不同類型的手機(jī)上移植,我們盡量采用HTTP作為網(wǎng)絡(luò)連接的首選協(xié)議,這樣還能重用服務(wù)器端的代碼。但是,由于HTTP是一個基于文本的效率較低的協(xié)議,因此,必須仔細(xì)考慮手機(jī)和服務(wù)器端的通信內(nèi)容,盡可能地提高效率。

對于MIDP應(yīng)用程序,應(yīng)當(dāng)盡量做到:

1.發(fā)送請求時,附加一個User-Agent頭,傳入MIDP和自身版本號,以便服務(wù)器能識別此請求來自MIDP應(yīng)用程序,并且根據(jù)版本號發(fā)送相應(yīng)的相應(yīng)。
2.連接服務(wù)器時,顯示一個下載進(jìn)度條使用戶能看到下載進(jìn)度,并能隨時中斷連接。
3.由于無線網(wǎng)絡(luò)連接速度還很慢,因此有必要將某些數(shù)據(jù)緩存起來,可以存儲在內(nèi)存中,也可以放到RMS中。

對于服務(wù)器端而言,其輸出響應(yīng)應(yīng)當(dāng)盡量做到:

1. 明確設(shè)置Content-Length字段,以便MIDP應(yīng)用程序能讀取HTTP頭并判斷自身是否有能力處理此長度的數(shù)據(jù),如果不能,可以直接關(guān)閉連接而不必繼續(xù)讀取HTTP正文。
2. 服務(wù)器不應(yīng)當(dāng)發(fā)送HTML內(nèi)容,因為MIDP應(yīng)用程序很難解析HTML,XML雖然能夠解析,但是耗費CPU和內(nèi)存資源,因此,應(yīng)當(dāng)發(fā)送緊湊的二進(jìn)制內(nèi)容,用DataOutputStream直接寫入并設(shè)置Content-Type為application/octet-stream。
3. 盡量不要重定向URL,這樣會導(dǎo)致MIDP應(yīng)用程序再次連接服務(wù)器,增加了用戶的等待時間和網(wǎng)絡(luò)流量。
4. 如果發(fā)生異常,例如請求的資源未找到,或者身份驗證失敗,通常,服務(wù)器會向瀏覽器發(fā)送一個顯示出錯的頁面,可能還包括一個用戶登錄的Form,但是,向MIDP發(fā)送錯誤頁面毫無意義,應(yīng)當(dāng)直接發(fā)送一個404或401錯誤,這樣MIDP應(yīng)用程序就可以直接讀取HTTP頭的響應(yīng)碼獲取錯誤信息而不必繼續(xù)讀取相應(yīng)內(nèi)容。
5. 由于服務(wù)器的計算能力遠(yuǎn)遠(yuǎn)超過手機(jī)客戶端,因此,針對不同客戶端版本發(fā)送不同響應(yīng)的任務(wù)應(yīng)該在服務(wù)器端完成。例如,根據(jù)客戶端傳送的User-Agent頭確定客戶端版本。這樣,低版本的客戶端不必升級也能繼續(xù)使用。

MIDP的聯(lián)網(wǎng)框架定義了多種協(xié)議的網(wǎng)絡(luò)連接,但是每個廠商都必須實現(xiàn)HTTP連接,在MIDP 2.0中還增加了必須實現(xiàn)的HTTPS連接。因此,要保證MIDP應(yīng)用程序能在不同廠商的手機(jī)平臺上移植,最好只使用HTTP連接。雖然HTTP是一個基于文本的效率較低的協(xié)議,但是由于使用特別廣泛,大多數(shù)服務(wù)器應(yīng)用的前端都是基于HTTP的Web頁面,因此能最大限度地復(fù)用服務(wù)器端的代碼。只要控制好緩存,仍然有不錯的速度。

???? SUN的MIDP庫提供了javax.microediton.io包,能非常容易地實現(xiàn)HTTP連接。但是要注意,由于網(wǎng)絡(luò)有很大的延時,必須把聯(lián)網(wǎng)操作放入一個單獨的線程中,以避免主線程阻塞導(dǎo)致用戶界面停止響應(yīng)。事實上,MIDP運行環(huán)境根本就不允許在主線程中操作網(wǎng)絡(luò)連接。因此,我們必須實現(xiàn)一個靈活的HTTP聯(lián)網(wǎng)模塊,能讓用戶非常直觀地看到當(dāng)前上傳和下載的進(jìn)度,并且能夠隨時取消連接。

??? 一個完整的HTTP連接為:用戶通過某個命令發(fā)起連接請求,然后系統(tǒng)給出一個等待屏幕提示正在連接,當(dāng)連接正常結(jié)束后,前進(jìn)到下一個屏幕并處理下載的數(shù)據(jù)。如果連接過程出現(xiàn)異常,將給用戶提示并返回到前一個屏幕。用戶在等待過程中能夠隨時取消并返回前一個屏幕。

我們設(shè)計一個HttpThread線程類負(fù)責(zé)在后臺連接服務(wù)器,HttpListener接口實現(xiàn)Observer(觀察者)模式,以便HttpThread能提示觀察者下載開始、下載結(jié)束、更新進(jìn)度條等。HttpListener接口如下:

public interface HttpListener {
??? void onSetSize(int size);
??? void onFinish(byte[] data, int size);
??? void onProgress(int percent);
??? void onError(int code, String message);
}

實現(xiàn)HttpListener接口的是繼承自Form的一個HttpWaitUI屏幕,它顯示一個進(jìn)度條和一些提示信息,并允許用戶隨時中斷連接:

public class HttpWaitUI extends Form implements CommandListener, HttpListener {
??? private Gauge gauge;
??? private Command cancel;
??? private HttpThread downloader;
??? private Displayable displayable;
??? public HttpWaitUI(String url, Displayable displayable) {
??????? super("Connecting");
??????? this.gauge = new Gauge("Progress", false, 100, 0);
??????? this.cancel = new Command("Cancel", Command.CANCEL, 0);
??????? append(gauge);
??????? addCommand(cancel);
??????? setCommandListener(this);
??????? downloader = new HttpThread(url, this);
??????? downloader.start();
??? }
??? public void commandAction(Command c, Displayable d) {
??????? if(c==cancel) {
??????????? downloader.cancel();
??????????? ControllerMIDlet.goBack();
??????? }
??? }
??? public void onFinish(byte[] buffer, int size) { … }
??? public void onError(int code, String message) { … }
??? public void onProgress(int percent) { … }
??? public void onSetSize(int size) { … }
}

HttpThread是負(fù)責(zé)處理Http連接的線程類,它接受一個URL和HttpListener:

class HttpThread extends Thread {
??? private static final int MAX_LENGTH = 20 * 1024; // 20K
??? private boolean cancel = false;
??? private String url;
??? private byte[] buffer = null;
??? private HttpListener listener;
??? public HttpThread(String url, HttpListener listener) {
??????? this.url = url;
??????? this.listener = listener;
??? }
??? public void cancel() { cancel = true; }
}

使用GET獲取內(nèi)容

我們先討論最簡單的GET請求。GET請求只需向服務(wù)器發(fā)送一個URL,然后取得服務(wù)器響應(yīng)即可。在HttpThread的run()方法中實現(xiàn)如下:

public void run() {
??? HttpConnection hc = null;
??? InputStream input = null;
??? try {
??????? hc = (HttpConnection)Connector.open(url);
??????? hc.setRequestMethod(HttpConnection.GET); // 默認(rèn)即為GET
??????? hc.setRequestProperty("User-Agent", USER_AGENT);
??????? // get response code:
??????? int code = hc.getResponseCode();
??????? if(code!=HttpConnection.HTTP_OK) {
??????????? listener.onError(code, hc.getResponseMessage());
??????????? return;
??????? }
??????? // get size:
??????? int size = (int)hc.getLength(); // 返回響應(yīng)大小,或者-1如果大小無法確定
??????? listener.onSetSize(size);
??????? // 開始讀響應(yīng):
??????? input = hc.openInputStream();
??????? int percent = 0; // percentage
??????? int tmp_percent = 0;
??????? int index = 0; // buffer index
??????? int reads; // each byte
??????? if(size!=(-1))
??????????? buffer = new byte[size]; // 響應(yīng)大小已知,確定緩沖區(qū)大小
??????? else
??????????? buffer = new byte[MAX_LENGTH]; // 響應(yīng)大小未知,設(shè)定一個固定大小的緩沖區(qū)
??????? while(!cancel) {
??????????? int len = buffer.length - index;
??????????? len = len>128 ? 128 : len;
??????????? reads = input.read(buffer, index, len);
??????????? if(reads<=0)
??????????????? break;

轉(zhuǎn)載于:https://www.cnblogs.com/big4panda/archive/2010/10/17/6417580.html

總結(jié)

以上是生活随笔為你收集整理的J2ME最佳实践之联网开发-编写反应灵敏的联网提示界面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 四虎影视库 | 狼人av在线 | 国产精品不卡 | 香蕉久久网 | 在线欧美亚洲 | 高潮又黄又刺激 | 精品国产乱码一区二区三 | 91亚洲精品视频 | 北岛玲一区二区 | 99色在线观看 | 免费欧美一级 | www.婷婷.com | 尤物精品在线观看 | 日韩大片在线免费观看 | 香蕉av网站| 四虎影视免费观看 | 新天堂网 | 人人舔人人 | 不卡av中文字幕 | 国产第一草草影院 | 黄网在线免费观看 | 中文字幕日韩电影 | 日韩视频在线免费 | 黄色h视频 | av在线不卡免费 | 欧美性videos高清精品 | eeuss鲁丝片一区二区三区 | 国产精品视频一区二区三区 | 久久国产一二三 | 国产成人精品999在线观看 | 第一次破处视频 | 欧美 在线 | 国产精品五月天 | 毛片中文字幕 | 五月婷久久 | 久久国产视频网 | 欧美一级黄色网 | 特黄色一级片 | 大尺度av| 欧美一二区视频 | 久久黄色大片 | av性色 | 国产美女喷水 | 国产a级片 | 亚洲福利视频在线 | 中文字幕在线精品 | 国产午夜无码视频在线观看 | 黄色一级片在线免费观看 | 黄色av网站免费在线观看 | 伊人婷婷色 | 国产高清欧美 | 中文字幕第7页 | 男人天堂久久 | 国产精品久久久久久中文字 | 日韩精品在线免费视频 | 国产夫妻性爱视频 | 日韩欧美一区二区在线 | www.麻豆av.com| 日本久久不卡 | 欧美性生交大片免费看 | 欧美日韩亚洲一区二区三区 | 97公开免费视频 | 少妇一晚三次一区二区三区 | 国产aⅴ激情无码久久久无码 | 加勒比波多野结衣 | 亚洲精品视频在线 | 蜜臀在线一区二区三区 | 欧美日韩在线观看视频 | 久久久久一区二区三区四区 | 久久人人干| 40到50岁中老年妇女毛片 | 亚一区二区 | 夜夜爽爽 | 日韩一区中文字幕 | 青青青视频免费观看 | 五月天视频网 | 国产亚洲成av人片在线观看桃 | 久章草在线观看 | 68日本xxxxxⅹxxx22 | 手机在线看片日韩 | 日韩av图片| 鲁丝一区二区 | 一区二区三区免费看视频 | 国产精品黄色av | 一边吃奶一边摸做爽视频 | 阿v天堂2018 俄罗斯丰满熟妇hd av色吧 | 国产日本在线 | 四虎成人网 | 日韩欧美高清在线视频 | 国产av成人一区二区三区 | 日本视频www | 成品短视频泡芙 | 日本在线不卡一区 | 亚洲精品久久久久久久蜜桃臀 | 国产成人在线观看 | 中文字幕久久久久 | 成人免费观看视频 | 神马午夜不卡 | 国产a级免费视频 |