Đề tài Lập trình thiết bị di động trên J2ME

105 379 0
Đề tài Lập trình thiết bị di động trên J2ME

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Header Page of 113 Mục lục ChươngI: Giới thiệu tổng quan Lý chọn dề tài…………………………………………….….3 Mục Tiêu………………………………………….…………… 3 Đối tượng nghiên cứu…………………………………….…….4 Phạm vi nghiên cứu……………………………………….… Môi trường thực hiện………………………………….……….4 Giới thiệu Java công nghệ J2ME …………………… Giới thiệu Java…………………………………… Giới thiệu J2ME lập trình J2ME…………………… 6.1 Tại chọn J2ME……………………………………….7 6.2 Kiến trúc J2ME…………………………………… 6.3 Phát triển ứng dụng…………………………………… 11 6.4 Kiểm tra lỗi chạy thử……………………………… 11 6.5 Đóng gói ứng dụng…………………………… 12 6.6 Triển khai ứng dụng với tập tin JAR………………… 12 6.7 Tập tin manifest.mf tập tin JAD………………… 12 6.8 Tối ưu mã giảm kích thước ứng dụng…………… 13 6.9 Những khó khăn…………………………………….… 14 Chương II: Lập trình với J2ME……………… …………….……16 MIDlet đối tượng Display…………………….…….….….16 1.1 MIDlet – Vòng đời MIDlet…………….….….16 1.2 Đối tượng Display………………………………………19 1.3 Đối tượng Displayable…………………………….… 19 Giao diện người dùng cấp cao………………………….……20 Footer Page of 113 Header Page of 113 2.1 Đối tượng Display, Displayable Screen…………… 20 2.2 Thành phần Form Items………………………….… 21 2.3 Thành phần List, Textbox, Alert, Ticker… .33 Giao diện người dùng câp thấp…………………… ………….39 3.1 Các hàm API mức thấp………………………….……… 39 3.2 Lớp Canvas kỹ thuật xử lý đồ họa………….……… 39 3.3 Lớp Graphics…………………………………….……… 49 Chương III: Hệ thống quản lý ghi………………………………64 Lưu trữ cố định thông qua RecordStore……………… ….64 Các vấn đề với RMS…………………………………… … 67 Các hàm API RMS…………………………….…….… 68 Sắp xếp ghi với RecordComparator……………….… 73 Tìm kiếm ghi với RecordFilter……………… ……… 83 Nhận biết thay đổi với RecordListener………………… …88 Chương IV: Khung kết nối chung……………………………………93 Cây phân cấp Connection………………………… ……… 93 Kết nối HTTP…………………………………………….… 95 Client Request Server Response……………… …… 100 Chương V: Tổng kết………………………………………….…… 104 Tài liệu tham khảo ………………………………………………… 105 Footer Page of 113 Header Page of 113 CHƯƠNG I: GIỚI THIỆU TỔNG QUAN Lý chọn đề tài Công nghệ thông tin ngày có vai trò quan trọng sống hàng ngày Hiện có nhiều công nghệ phát triển song song với việc phát triển công nghệ thông tin Bluetooth, Wireless, WAP, SOAP,… nhằm giúp công nghệ thông tin ngày thân thiết với người dùng Một công nghệ góp phần không nhỏ việc kết nối người với thông tin người với người công nghệ di động.Với tốc độ phát triển lợi ích to lớn công nghệ di động, thấy có ảnh hưởng lớn đến sống người Không giống trước điện thoại có chức đơn giản đàm thoại, điện thoại có thêm nhiều chức năng, ứng dụng khác như: email, truy cập Internet, video, nghe nhạc, chơi game, … đồng thời với phát triển vũ bão dịch vụ gia tăng điện thoại di động dựa công nghệ WAP SOAP Em chọn đề tài “Lập trình thiết bị di động J2ME” viết số ứng dụng đơn giản nhằm khai thác tính thiết bị di động mà chủ yếu điện thoại di động Qua em cố gắng nắm bắt ứng dụng tốt kỹ thuật lập trình thiết bị di động Mục tiêu Khi thực đề tài này, mục tiêu mà em mong muốn đạt là: Hiểu chi tiết J2ME ứng dụng để lập trình thiết bị di động Nắm kỹ thuật xử lý form, âm thanh, hình ảnh, lưu trữ điện thoại di động Ứng dụng kết đạt để xây dựng chương trình đơn giản, có tiện ích phục vụ nhu cầu người sử dụng điện thoại di động Áp dụng thành công số dòng máy điện thoại di động hỗ trợ Java hãng Nokia, Sony, Samsung,… Footer Page of 113 Header Page of 113 Đối tượng nghiên cứu Hiểu chi tiết J2ME ứng dụng để lập trình thiết bị di động Nắm kỹ thuật xử lý âm thanh, hình ảnh, lưu trữ liệu thiết bị di động Ứng dụng kết có để xây dựng ứng dụng thực tiễn thiết bị di động Tìm hiểu công nghệ nâng cao điện thoại di động Bluetooth, WAP, SOAP Tìm hiểu nguyên lý hoạt động dịch vụ gia tăng điện thoại di động Nếu thời gian, tìm hiểu ý tưởng lập trình phân tán thiết bị di động Đây ý tưởng chưa áp dụng cho thiết bị di động Phạm vi nghiên cứu Nghiên cứu chi tiết công nghệ J2ME kỹ thuật lập trình điên thoại di động Ứng dụng kết nghiên cứu để xây dựng ứng dụng triển khai điện thoại di động Vì thời gian có hạn khả tìm hiểu nhiều hạn chế nên em trình bày kỹ thuật lập trình số dòng điện thoại phổ biển hãng lớn Nokia, Samsung, Sony Ericssion Em cố gắng khai thác mạnh form, âm thanh, hình ảnh mà nhà sản xuất cung cấp điện thoại di động họ Do đủ thiết bị để nghiên cứu nên em trình bày kỹ thuật lập trình điện thoại di động thiết bị di động khác nói chung Do đề tài này, cụm từ “thiết bị di động” hiểu theo nghĩa “điện thoại di động” Môi trường thực Hệ điều hành Windows XP IDE: NetBeans 5.5, NetBeans Mobility Pack 5.5.1 ( kèm WTK 2.5) JDK 1.6.02 Sun Wireless Toolkit 2.2 Footer Page of 113 Header Page of 113 Giới thiệu Java công nghệ J2ME Giới thiệu Java Java công nghệ hãng Sun Microsystems xây dựng từ cuối năm 1990 với tên Oak phát triển vượt bậc với đóng góp hàng vạn lập trình viên giới Ban đầu, Oak kỹ sư James Gosling cộng xây dựng với mục đích lập trình cho mặt hàng điện dân dụng với mục tiêu nhỏ gọn tương thích với nhiều loại thiết bị phần cứng khác Sau Oak sử dụng nhiều dự án dự án Xanh (Blue Project), dự án Phim theo yêu cầu (Video on demand Project) Sau chuyến du lịch tới đảo Java Indonesia, nhóm phát triển Oak đổi tên Oak thành Java Java mà tiền thân Oak xây dựng chủ yếu dựa công cụ phát triển (Java Development Kit - JDK) thư viện chuẩn chưa trình biên dịch, trình thông dịch, trình đóng gói, tài liệu,… Đây tằng cho việc phát triển ứng dụng Java Hiện nay, cộng đồng Java giới mà đầu hãng Sun Microsystems xây dựng nhiều nhánh cho Java như: JavaMail (thư điện tử), Java TAPI (viễn thông), Java3D (đồ họa chiều), J2ME (ứng dụng cho thiết bị di động),… Hiện Java có phiên sau: J2SETM (Java Platform, Standart Edition): Phiên chuẩn gồm công cụ thông dụng dùng để chạy máy PC mạng máy tính nhỏ J2EETM (Java Platform, Enterprise Edition): Phiên dành cho máy chủ với nhớ lớn Bao gồm kiến trúc nâng cao Web, EJB, Transaction,… dùng để xây dựng ứng dụng có quy mô lớn Footer Page of 113 Header Page of 113 J2METM (Java Platform, Micro Edition): Bao gồm môi trường thư viện Java dùng để phát triển ứng dụng thiết bị có nhớ nhỏ điện thoại di động, PDA, đồ gia dụng,… Giới thiệu J2ME lập trình cho thiết bị di động J2ME phát triển từ kiến trúc JavaCard, EmbededJava PersonalJava phiên Java 1.1 Đến dự đời phiên Java Sun định thay PersonalJava phiên có tên Java Micro Edition, viết tắt J2ME J2ME sử dụng cho thiết bị nhỏ gọn với dung lượng nhớ bé khả xử lý thấp Mục tiêu Java cho phép người lập trình viết ứng dụng độc lập với thiết bị di động, không cần quan tâm đến phần cứng thật Để làm thế, J2ME xây dựng tầng khác để che giấu việc tương tác trực tiếp với phần cứng thiết bị Các tầng cảu J2ME xây dựng CLDC (Connected Limited Device Configuration): Tầng tầng Phần cứng thiết bị - tầng vật lý bao gồm phần cứng thiết bị di động Các tầng bên tầng Phần cứng thiết bị tầng trừu tượng, chúng cung câp cho lập trình viên nhiều giao diện lập trình thân thiện dễ dàng mà không cần quan tâm đến phần cứng Nói khác chúng đóng vai trò trung gian giúp cho lập trình viên tương tác với phần Footer Page of 113 Header Page of 113 cứng mà không cần quan tâm đến chi tiết thực phần cứng thiết bị Tầng Phần cứng thiết bị (Device Hardware Layer): thiết bị di động thật với nhớ tốc độ xử lý cụ thể Các thiết bị di động khác có vi xử lý tập lệnh khác Mục tiêu J2ME cung cấp cho lập trình viên khả giao tiếp giống với tất loại thiết bị di động khác Tầng máy ảo Java (Java Virtual Machine Layer): tầng đóng vai trò thông ngôn chương trình thiết bị Nó thông dịch mã bytecode (mã có sau biên dịch mã nguồn chương trình) thành mã máy thiết bị di động Tầng bao gồm KVM (K Virtual Machine) biên dịch mã bytecode thành mã máy Nó cung cấp chuẩn hóa cho thiết bị di động để ứng dụng J2ME sau biên dịch chạy thiết bị di động hỗ trợ KVM Tầng cấu hình (Configuration Layer): Tầng cung cấp hàm API nhân J2ME Lập trình viên sử dụng lớp phương thức API nhiên không thực phong phú tập API tầng trạng Tầng trạng (Profile Layer): Tầng cung cấp hàm API hữu dụng cho việc lập trình Mục đích tầng xây dựng nên lớp cấu hình cung cấp nhiều thư viện ứng dụng 6.1 Lý chọn J2ME: Java ban đầu thiết kế dành cho máy với tài nguyên nhớ hạn chế Thị trường J2ME mở rộng cho nhiều chủng loại thiết bị như: Các lọai thẻ cá nhân Java Card Máy điện thoại di động Máy PDA (Personal Digital Assistant - thiết bị trợ giúp cá nhân) Các hộp điều khiển dành cho tivi, thiết bị giải trí gia dụng … Footer Page of 113 Header Page of 113 6.2 Kiến trúc J2ME Phần trình bày kiến trúc tổng quát tảng Java a) Giới thiệu thành phần tảng J2ME: Định nghĩa Configuration (Cấu hình): đặc tảđịnh nghĩa môi trường phần mềm cho dòng thiết bịđược phân loại tập hợp đặc tính, ví dụ như: Kiểu số lượng nhớ Kiểu tốc độ vi xử lý Kiểu mạng kết nối Do đặc tả nên nhà sản xuất thiết bị Samsung, Nokia …bắt buộc phải thực thi đầy đủ đặc tả Sun qui định để lập trình viên dựa vào môi trường lập trình quán thông qua quán này, ứng dụng tạo mang tính độc lập thiết bịcao Ví dụ lập trình viên viết chương trình game cho điện thoại Samsung sửa đổi chương trình cách tối thiểu để chạy điện thọai Nokia Hiện Sun đưa dạng Configuration: CLDC (Connected Limited Device Configuration-Cấu hình thiết bị kết nối giới hạn): thiết kếđể nhắm vào thị trường thiết bị cấp thấp (low-end), thiết bị thông thường máy điện thọai di động PDA với khoảng 512 KB nhớ Vì tài nguyên nhớ hạn chế nên CLDC gắn với Java không dây (Java Footer Page of 113 Header Page of 113 Wireless ), dạng cho phép người sử dụng mua tải ứng dụng Java, ví dụ Midlet CDC- Connected Device Configuration (Cấu hình thiết bị kết nối): CDC đưa nhắm đến thiết bị có tính mạnh dòng thiết bị thuộc CLDC yếu hệ thống máy để bàn sử dụng J2SE Những thiết bị có nhiều nhớ (thông thường 2Mb) có xử lý mạnh Các sản phẩm kểđến máy PDA cấp cao, điện thoại web, thiết bị gia dụng gia đình … Cả dạng Cấu hình kể chứa máy ảo Java (Java Virtual Machine) tập hợp lớp (class) Java để cung cấp môi trường cho ứng dụng J2ME Tuy nhiên, bạn ý thiết bị cấp thấp, hạn chế tài nguyên nhớ xử lý nên yêu cầu máy ảo hổ trợ tất tính với máy ảo J2SE, ví dụ, thiết bị thuộc CLDC phần cứng yêu cầu phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không yêu cầu hỗ trợ kiểu float double Bảng so sánh thông số kỹ thuật CDC CLDC Footer Page of 113 Header Page 10 of 113 CLDC CDC Ram >=32K, =256K Rom >=128k, =512k Nguồn Năng Có GiớI Hạn (nguồn Không Lượng pin) hạn Network Chậm Nhanh giới b) Định nghĩa Profile: Profile mở rộng Configuration cách thêm vào class để bổ trợ tính cho thiết bị chuyên biệt Cả Configuration có profile liên quan từ profile dùng class lẫn Đến ta nhận thấy profile định nghĩa tập hợp class khác nhau, nên thường ta chuyển ứng dụng Java viết cho profile chạy máy hỗ trợ profile khác Cũng với lý đó, bạn lấy ứng dụng viết J2SE hay J2EE chạy máy hỗtrợ J2ME Sau profile tiêu biểu: Mobile Information Device Profile (MIDP): profile bổ sung tính hỗtrợ kết nối, thành phần hỗ trợ giao diện người dùng … vào CLDC Profile thiết kế chủ yếu để nhắm vào điện thọai di động với đặc tính hình hiển thị hạn chế, dung lượng chứa có hạn Do MIDP cung cấp giao diện người dùng đơn giản tính mạng đơn giản dựa HTTP Có thể nói MIDP profile tiếng kiến thức cho lập trình Java máy di động (Wireless Java) PDA Profile: tương tự MIDP, với thị trường máy PDA với hình bộnhớ lớn Foundation Profile: cho phép mở rộng tính CDC với phần lớn thư viện Core Java2 1.3 Ngoài có Personal Basis Profile, Personal Profile, RMI Profile, Game Profile Footer Page 10 of 113 10 Header Page 91 of 113 } } public void db(String str) { System.err.println("Msg: " + str); } } class TestRecordListener implements RecordListener { public void recordAdded(RecordStore recordStore, int recordId) { try { System.out.println("Record with ID#: " + recordId + "added to RecordStore: " + recordStore.getName()); } catch (Exception e) { System.err.println(e); } } public void recordDeleted(RecordStore recordStore, int recordId) { try { System.out.println("Record with ID#: " + recordId + "deleted from RecordStore: " + recordStore.getName()); } catch (Exception e) { System.err.println(e); } } public void recordChanged(RecordStore recordStore, int recordId) { try{ System.out.println("Record with ID#: " + recordId + "changed in RecordStore: " recordStore.getName()); } catch (Exception e) { System.err.println(e); } } } Footer Page 91 of 113 91 Header Page 92 of 113 Các Ngoại Lệ Phát Sinh Trong RMS Các phương thức API RMS việc phát sinh ngoại lệ thông thường đến môi trường chạy (runtime enviroment) RMS định nghĩa thêm ngoại lệ gói javax.microedition.rms sau: InvalidRecordIDException: Ngoại lệ phát sinh thao tác Record RecordID không thích hợp RecordStoreFullException: Ngoại lệ phát sinh không đủ vùng nhớ RecordStoreNotFoundException: Ngoại lệ phát sinh mở RecordStore không tồn RecordStoreNotOpenException: Ngoại lệ phát sinh thao tác RecordStore bịđóng RecordStoreException: Đây lớp cha lớp trên, ngoại lệ mô tả lỗi chung trình thao tác với RMS Footer Page 92 of 113 92 Header Page 93 of 113 Chương IV: KHUNG KẾT NỐI CHUNG (Generic Connection Framework - GCF) Trong phiên J2SE, hỗ trợ giao thức kết nối mạng có gói java.io java.net với tổng dung lượng 200KB bao gồm 100 lớp giao diện Qaủ thật với nhớ nhỏ bé hạn chế xử lý, việc đưa gói vào ứng dụng viết J2ME điều hoàn toàn không khả thi Chính vậy, mở rộng phạm vi hỗ trợ giao thức mạng hệ thống tập tin, ngưoiừ ta không dùng lại lớp J2SE mà xây dựng khái niệm gọi Khung kết nối chung (Generic Connection Framework - GCF) GCF tập hợp lớp giao diện thiết kế nhằm tọa thuận tiện cho việc truy xuất đến hệ thống lưu trữ kết nối mạng Mục tiêu GCF tạo tập lớp hoàn toàn mà cung cấp tập J2SE cách có chọn lọc Tập giới hạn tối ưu để phù hợp với ràng buộc khác biệt thiết bị di động Cây phân cấp Connection Khi đưa khái niệm phân cấp, người ta chủ ý tạo lớp có khả mở loại kết nối bao gồm: file, http, datagram, … Tên lớp Connector Như sử dụng Connector để mở kết nối, cần gọi phương thức open có định dạng sau: Connector.Open(“protocol:address; parameter”) Cơ chế mà GCF dùng để mở nhiều loại giao tiếp phương thức chung chứng minh tính uyển chuyển GCF Cơ chế hoạt động sau: Trong thời gian thực thi, có yêu cầu mở giao thức, Connector tìm đến lớp tương ứng cài đặt giao thức Quá trình tìm kiếm thực thông qua phương thức Class.forName() Ví dụ để yêu cầu mở kết nối HTTP J2ME, yêu cầu viết sau: Footer Page 93 of 113 93 Header Page 94 of 113 Class.forName(“com.sun.midp.io.j2me.http.Protocol”); Khi tìm thấy lớp tương ứng, Class.forName() trả đối tượng có cài đặt giao diện Connection (trong lớp Connector giao diện Connection định nghĩa sẵn CLDC) Sau phân cấp Connection, bao gồm lớp mà lớp định nghĩa giao diện Trong kiến trúc phân cấp, cài đặt thật ác giao thức nằm mức trạng Trong MIDP 1.0, HttpConnection hỗ trựo tâpj HTTP phiên 1.0 Do lớp mở rộng ContentConnection, cung cấp sẵn 20 phương thức chuyên biệt để giao tiếp thông qua giao thức HTTP Mặc dù DatagramConnection xuất phân cấp người ta không bắt buộc cài đặt MIDP để hỗ trợ giao thức Footer Page 94 of 113 94 Header Page 95 of 113 Kết nối HTTP HTTP giao thức chắn hỗ trợ MIDP 1.0 Chúng ta giao tiếp với máy chủ hay thiết bị từ xa có hỗ trợ giao thức nhờ vào lớp HttpConnection Lớp Connector cung cấp cho người dùng bảy phương thức để tạo kết nối tới máy chủ Ba phương thức số biến thể phương thức open() Các phương thức mô tả bảng sau: Các phương thức lớp javax.microedition.io.Connector Phương thức Mô tả static Connection open(String Tạo kết nối có chế độ name) READ_WRITE static Connection open(String name, Tạo kết nối với chế độ int mode) static Connection open(String name, int mode, boolean timeouts) static InputStream openInputStream(String name) static OutputStream openOutputStream(String name) định Tạo kết nối với chế độ định, thêm ngoại lệ time out Tạo kết nối luồng nhập Tạo kết nối luồng xuất static DataInputStream Tạo kết nối luồng nhập kiểu openDataInputStream(String name) DataInputStream static DataOutputStream openDataOutputStream(String name) Footer Page 95 of 113 Tạo kết nối luồng xuất kiểu DataOutputStream 95 Header Page 96 of 113 Dưới đoạn code mở kết nối thông qua stream // Create a ContentConnection String url = “http://www.corej2me.com”; ContentConnection connection = (ContentConnection) Connector.open(url); // With the connection, open a stream InputStream iStrm = connection.openInputStream(); // ContentConnection includes a length method int length = (int) connection.getLength(); if (length != -1) { byte imageData[] = new byte[length]; // Read the data into an array iStrm.read(imageData); } Thật tọa kết nối InputStream mà không cần có mặt ContentConnection Tuy nhiên, phương pháp có hạn chế không cung cấp phương thức để xác định chiều dài liệu Dưới cách mở kết nối dạng HttpConnection: String url = “http://www.corej2me.com/midbook_v1e1/ch14/duke.png”; HttpConnection http = (HttpConnection) Connector.open(url); Sau mở, kết nối cung cấp truy xuất đến nhiều loại luồng mà InputStream DataInputStream hai số Tuy nhiên mạnh thực kết nối HttpConnection lại nằm chỗ có khả giúp cho lập trình viên loại bỏ gánh nặng câu lệnh HTTP Dưới ví dụ đơn giản, MIDlet download hiển thị hình ảnh tải MIDlet dử dụng ByteArrayOutputStream để chứa liệu tải ta không dùng ContentConnection nên biết kích cỡ liệu tải Footer Page 96 of 113 96 Header Page 97 of 113 /* -* DownloadImage.java * */ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import java.io.*; public class DownloadImage extends MIDlet implements CommandListener { private Display display; private TextBox tbMain; private Form fmViewPng; private Command cmExit; private Command cmView; private Command cmBack; public DownloadImage() { display = Display.getDisplay(this); // Create the textbox, allow maximum of 50 characters tbMain = new TextBox("Enter url", "http://localhost/intel.png", 55, 0); // Create commands and add to textbox cmExit = new Command("Exit", Command.EXIT, 1); cmView = new Command("View", Command.SCREEN, 2); tbMain.addCommand(cmExit); tbMain.addCommand(cmView ); // Set up a listener for textbox tbMain.setCommandListener(this); // Create the form that will hold the image fmViewPng = new Form(""); // Create commands and add to form cmBack = new Command("Back", Command.BACK, 1); fmViewPng.addCommand(cmBack); // Set up a listener for form fmViewPng.setCommandListener(this); } public void startApp() { display.setCurrent(tbMain); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable s) { Footer Page 97 of 113 97 Header Page 98 of 113 // If the Command button pressed was "Exit" if (c == cmExit) { destroyApp(false); notifyDestroyed(); } else if (c == cmView) { // Download image and place on the form try { Image im; if ((im = getImage(tbMain.getString())) != null) { ImageItem ii = new ImageItem(null, im, ImageItem.LAYOUT_DEFAULT, null); // If there is already an image, set (replace) it if (fmViewPng.size() != 0) fmViewPng.set(0, ii); else // Append the image to the empty form fmViewPng.append(ii); } else fmViewPng.append("Unsuccessful download."); // Display the form with image display.setCurrent(fmViewPng); } catch (Exception e) { System.err.println("Msg: " + e.toString()); } } else if (c == cmBack) { display.setCurrent(tbMain); } } private Image getImage(String url) throws IOException { InputStream iStrm = (InputStream) Connector.openInputStream(url); Image im = null; try { ByteArrayOutputStream bStrm = new ByteArrayOutputStream(); int ch; while ((ch = iStrm.read()) != -1) bStrm.write(ch); // Place into image array byte imageData[] = bStrm.toByteArray(); // Create the image from the byte array im = Image.createImage(imageData, 0, imageData.length); } Footer Page 98 of 113 98 Header Page 99 of 113 finally { // Clean up if (iStrm != null) iStrm.close(); } return (im == null ? null : im); } } Một textbox cho phép nhập địa URL Sau tải về, hình ảnh sẽđược hiển thị Footer Page 99 of 113 99 Header Page 100 of 113 Client Request Server Response Cả HTTP HTTPS gửi request response Máy client gửi request, server trả response Client request bao gồm phần sau: Request method Header Body Request method định nghĩa cách mà liệu gửi đến server Có phương thức cung cấp sẵn GET, POST, HEADER Khi sử dụng Get, liệu cần request nằm URL Với Post liệu gửi từ client sẽđược phân thành stream riêng biệt Trong đó, Header không gửi liệu yêu cầu lên server, thay vào header request meta information server GET POST hai phương thức request giống nhau, nhiên GET gửi liệu thông qua URL nên bị giới hạn, POST sử dụng stream riêng biệt nên khắc phục hạn chế Ví dụ việc mở HTTP Connection thông qua GET String url = "http://www.corej2me.com?size=large"; HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET); Những Header field cho phép ta truyền tham số từ client đến server Các header field thường dùng If-Modified-Since, Accept, and User Agent Bạn có thểđặt field thông qua phương thức setRequestProperty() Dưới ví dụ dùng setRequestProperty(), có liệu thay đổi sau ngày tháng năm 2005 gửi từ server: String url = "http://www.corej2me.com\somefile.txt"; HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.GET); // Set header field as key-value pair Footer Page 100 of 113 100 Header Page 101 of 113 http.setRequestProperty("If-Modified-Since", "Sat, Jan 2005 12:00:00 GMT"); Body chứa nội dung mà bạn muốn gửi lên server Ví dụ sử dụng POST gửi liệu từclient thông qua stream: String url = “http://www.corej2me.com”; tmp = "test data here"; OutputStream ostrm = null; HttpConnection http = null; http = (HttpConnection) Connector.open(url); http.setRequestMethod(HttpConnection.POST); // Send client body ostrm = http.openOutputStream(); byte bytes[] = tmp.getBytes(); for(int i = 0; i < bytes.length; i++) { os.write(bytes[i]); } os.flush(); Sau nhận sử lý yêu cầu từ phía client, server đóng gói gửi phía client Cũng client request, server gồm phần sau: Status line Header Body Status line thông báo cho client kết request mà client gửi cho server HTTP phân loại status line thành nhóm sau đây: 1xx is informational 2xx is success 3xx is redirection 4xx is client error 5xx is server error Status line bao gồm version HTTP server, status code, đoạn text đại diện cho status code Ví dụ: "HTTP/1.1 200 OK" "HTTP/1.1 400 Bad Request" "HTTP/1.1 500 Internal Server Error" Footer Page 101 of 113 101 Header Page 102 of 113 Header Không giống header client, server gửi data thông qua header Sau phương thức dùng để lấy thông tin Header mà server gửi về: String getHeaderField(int n) Get header field value looking up by index String getHeaderField(String name) Get header field value looking up by name String getHeaderFieldKey(int n) Get header field key using index Server trả nhiều Header field Trong trường hợp này, phương thức cho lấy header field thông qua index Còn phương thức thứ hai lấy nội dung header field dựa vào tên header field Còn muốn biết tên (key) header field, dùng phương thức thứ Sau ví dụ phương thức trên, trường hợp server gửi chuỗi "content-type=text/plain" Method Return value http.getHeaderField(0) "text-plain" http.getHeaderField("content- "text-plain" type") http.getHeaderFieldKey(0) "content-type" Body: Cũng giống client, server gửi hầu hết thông tin phần body cho client Client dùng input stream đểđọc kết trả từ server The HttpConnection API Như đề cập trên, ta sử dụng HttpConnection API để thiết lập kết nối MIDP Dưới API HttpConnection: Method Description long getDate() Get header field date long getExpiration() Gets header field expiration Footer Page 102 of 113 102 Header Page 103 of 113 String getFile() Gets filename from the URL int getHeaderField(int n) Gets header field value looking up by index String getHeaderField(String name) Gets header field value looking up by name long getHeaderFieldDate(String Gets named field as a long (representing the name, long def) date) int getHeaderFieldInt(String name, int def) Gets named field as an integer String getHeaderFieldKey(int n) Gets header field key using index String getHost() Gets host from the URL long getLastModified() Gets last-modified field value String getPort() Gets port from the URL String getProtocol() Gets protocol from the URL String getQuery() String getRef() String getRequestMethod() Gets the query string (only valid with GET request) Gets the reference portion of URL Gets the current setting of the request method (GET, POST or HEAD) String getRequestProperty(String Gets the current setting of a request key) property int getResponseCode() Gets the response code (numeric value) String getResponseMessage() Gets the response message (text value) String getURL() Gets the entire URL void setRequestMethod(String Sets the request method (GET, POST or method) HEAD) void setRequestProperty(String key, Sets a request property (header information) String value) Footer Page 103 of 113 103 Header Page 104 of 113 Chương V: TỔNG KẾT Hiện nay, lập trình điện thoại di động lĩnh vực thu hút nhiều lập trình viên Việc xây dựng ứng dụng thiết bị thiết bị nói chung điện thoại di động nói riêng cần thiết phát triển công nghệ di động Trong phạm vi đề tài, em trình bày phần công nghệ J2ME kỹ thuật lập trình cho điện thoại di động Những phần nghiên cứu, tìm hiểu qua trình học tập làm việc Hi vọng đề tài trở thành công cụ tham khảo có ích cho người tham gia tìm hiểu công nghệ J2ME Tuy vậy, hạn chế trình độ thiết bị nên em tránh khỏi vướng mắc sai sót trình tìm hiểu, nghiên cứu Em mong đánh giá chỉnh sửa thầy hướng dẫn bạn sinh viên đọc qua tài liệu Em xin chân thành cảm ơn Hà nội, ngày 26/11/2007 Bùi Duy Thành Footer Page 104 of 113 104 Header Page 105 of 113 Tài liệu tham khảo [1] Phương Lan, Java tập 3, NXB Lao động Xã hội, 2006 [2] Nguyễn Thị Bích Ngà, Nền tảng công nghệ J2Me & MDP, NXB Giao thông Vận tải, 2006 [3] Nguyễn Hữu Mai, Tổng quan J2ME, javavietnam.org, 2004 [4] Lê Ngọc Quốc Khánh, Phát triển ứng dụng J2ME J2ME Wireless Toolkit, 2004 [5] John W Muchow, Core J2METM Technology & MIDP, Prentice Hall PTR publisher, 2001 [6] Kim Topley, J2Me in a Nutshell, O’Reilly publisher, 2002 [7] Gwenaël Le Bodic, Mobile Messaging Technologies and Service, John Wiley & Sons publisher, 2003 Footer Page 105 of 113 105 ... of 113 6.9 Những khó khăn lập trình thiết bị di động Sử dụng công nghệ J2ME cho việc lập trình thiết bị di động việc không khó lập trình viên Tuy lập trình J2ME, lập trình viên gặp phải số khó... Do đủ thiết bị để nghiên cứu nên em trình bày kỹ thuật lập trình điện thoại di động thiết bị di động khác nói chung Do đề tài này, cụm từ thiết bị di động hiểu theo nghĩa “điện thoại di động ... điện thoại di động dựa công nghệ WAP SOAP Em chọn đề tài Lập trình thiết bị di động J2ME viết số ứng dụng đơn giản nhằm khai thác tính thiết bị di động mà chủ yếu điện thoại di động Qua em

Ngày đăng: 24/03/2017, 06:45

Từ khóa liên quan

Mục lục

  • 6.1 Lý do chọn J2ME:

  • 6.2 Kiến trúc của J2ME

  • 6.3 Phát triển ứng dụng

    • Biên dịch

    • 6.4 Kiểm tra lỗi và chạy thử

    • 6.5 Đóng gói

    • 6.6 Đóng gói và triển khai ứng dụng thành tập tin JAR

    • 6.7 Tập tin manifest.mf và tập tin JAD

    • 6.8 Tối ưu mã chương trình và giảm kích thước ứng dụng

    • 6.9 Những khó khăn khi lập trình trên thiết bị di động

    • 1.1 MIDlet – Vòng đời của một MIDlet

    • 1.2 Đối tượng Display

    • 1.3 Đối tượng Displayable

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan