Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.9. Sơ đồ Use case đăng ký nhận thông tin dịch vụ
Hình 5.10. Sơ đồ Use case đăng ký cung cấp thông tin dịch vụ Sơ đồ Use case giữa người dùng tương tác hệ thống
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.11. Sơ đồ Use case Người dùng và hệ thống
Sơ đồ UML của một số lớp trong Ứng dụng Lớp DemoMIDlet.java
Lớp này là MIDlet chính của Ứng dụng , có nhiệm vụ khởi tạo các đối tượng, lấy các thuộc tính từ tập tin .JAD mô tả Ứng dụng, hiển thị màn hình giới thiệu, sau đó giao nhiệm vụ hiển thị giao diện người dùng cho màn hình chức năng chính, DemoMIDlet cũng đảm nhận nhiệm vụ hiển thị lỗi, và trạng thái của Ứng dụng khi các lớp màn hình khác yêu cầu.
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.12. Sơ đồ UML của DemoMIDlet Lớp Roundtrip.java
Lớp này dùng để chuyển đổi giữa XML và WBXML
Hình 5.13. Sơ đồ UML của Roundtrip Lớp AboutForm.java
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Lớp này là 1 form trong giao diện màn hình, nhiệm vụ của lớp này đưa ra thông tin, địa chỉ lien hệ của nhà quản lý. Khi người dùng cần 1 sự hỗ trợ nào sẽ sử dụng dịch vụ này.
Hình 5.14. Sơ đồ UML của AboutForm Lớp UpdateForm.java
Lớp này được sử dụng khi người dùng cần cập nhật dữ liệu, mỗi khi có thêm dữ liệu chức năng này được sử dụng nhằm bổ sung thêm những giữ liệu mới về và sử dụng.
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.15. Sơ đồ UML UpdateForm Lớp LocalesForm.java
Lớp này có nhiệm vụ hiển thị tất cả các dịch vụ lên giao diện màn hình cho người dùng tiện sử dụng
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.16. Sơ đồ UML LocalesForm Lớp ServicesForm.java
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.17. Sơ đồ UML của ServicesForm Lớp ProducerDetail.java
Lớp này dùng để đưa ra thông tin chia tiết về một dịch vụ mà người sử dụng dùng.
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD Thư viện hỗ trợ
Ứng dụng sử dụng gói thư viện hỗ trợ là org.kxml.*. Gói org.kxml.* là bộ phân tích dành cho MIDP, gói này có đầy đủ các phương thức để phân tích tài liệu XML
Khảo sát cách làm việc với kXML, các lớp và gói trong bộ phân tích kXML. Lớp Attribute : Lớp này thể hiện thuộc tính của thẻ. Khi ta gọi phương thức StartTag.getAttribute, nó sẽ trả về một đối tượng có kiểu là Attribute là thuộc tính của thẻ đó. Lớp này có 4 phương thức, phương thức getName() trả về tên của thuộc tính, ta cũng có thể lấy giá trị của thuộc tính bằng cách gọi phương thức getValue() của nó. Phương thức toString() sẽ trả về dạng biểu diễn chuỗi của đối tượng Attribute.
Lớp XML : Lớp này biểu diễn dữ liệu XML, lớp này được dùng bởi bộ phân tích. Tất cả phương thức trong lớp này đều là tính (static). Nó có một số trường để bộ phân tích sử dụng, ví dụ như START – TAG, TEXT, END – TAG,…
Lớp PrefixMap : Lớp này biểu diễn PrefixMap của thẻ. Khi bạn gọi phương thức startTag.getPrefixMap(), nó sẽ trả về một đối tượng PrefixMap. Lớp này có 3 phương thức: getNamespace() trả về namespace của prefix này, phương thức getPrefix() trả về chuỗi biểu diễn của prefix và phương thức PrefixEnumeration().
Gói bộ phân tích org.kxml
Gói này chứa các lớp liên quan đến việc phân tích dữ liệu XML Gói org.kxml.io
Gói này chứa các lớp để ghi dữ liệu
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
Hình 5.19. Giao diện MIDlet sử dụng dịch vụ 5.6 Cài đặt và kiểm thử
Yêu cầu
Máy tính phải cài đặt bộ j2sdk 1.4 trở lên Cài đặt Tomcat để chạy Web Server
Cài đặt J2ME Wireless Toolkit 2.0 trở lên để chạy trình mô phỏng Phần mềm viết Ứng dụng : Eclipse, Netbean hoặc JBuilder
Cài đặt hệ quản trị MySQL
Cài đặt Ứng dụng trên thiết bị di động
Ứng dụng chỉ chạy trên những thiết bị di động hỗ trợ java
Sau khi chương trình chạy và đóng gói sẽ xuất ra 1 file .JAD và 1 file .JAR, người dùng có thể tải 2 file này về máy và chạy Ứng dụng
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD Tính năng nổi bật của chương trình
Ngoài việc cung cấp một danh sách cho người sử dụng lựa chọn và các thông tin về dịch vụ đó thì chương trình còn cung cấp thêm phần Tìm kiếm, gọi điện thoại cho Ứng dụng giúp người sử dụng tìm đến cửa hàng nhanh nhất cũng như muốn biết thêm thông tin gì về dịch vụ của mình.
5.7 Hướng phát triển cho ứng dụng
Với mức thực hiện là một đồ án tốt nghiệp, thời gian làm việc còn hạn hẹp nên em không thể hoàn chỉnh Ứng dụng của mình. Em đã thực hiện được giai đoạn đầu của Ứng dụng cung cấp thông tin cơ bản về dịch vụ cho người dùng thông tin đó nội dung bao gồm: Tên cửa hàng, địa chỉ, số điện thoại, sản phẩm chính và mức độ giảm giá cho dịch vụ.
Hướng phát triển cho Ứng dụng sẽ xây dựng hệ thống hoàn chỉnh có sử dụng Location Based Services. Từng bước thực hiện chương trình
Xây dựng hoàn thiện kho chứa Cơ sở dữ liệu nhằm sử dụng cho phát triển LBS như tích hợp hệ thống bản đồ số vào cơ sở dữ liệu, ví dụ dữ liệu về nhà cung cấp dịch vụ ngoài những thông tin về dịch vụ, nhà cung cấp cần có thêm thông tin về vị trí địa lý của
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
mình nằm ở đâu trên bản đồ bao gồm : toạ độ (kinh độ, vĩ độ), thể hiện vị trí địa lý trên bản đồ số
Ứng dụng được xây dựng dựa trên nền tảng middleware OpenLS.
Khi cài đặt chương trình lúc này thiết bị di động phải được hỗ trợ GPS hoặc 1 thiết bị riêng rẽ để xác định vị trí của người dùng theo toạ độ và theo bản đồ số
Một Ứng dụng hoàn chỉnh cần phải có một số yêu cầu nhất định : Tốc độ xử lý cho mỗi 1 yêu cầu, tính bảo mật cho chương trình, kích cỡ (không gian chiếm bộ nhớ) của Ứng dụng,…
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD Kết luận
Phát triển Ứng dụng trên nền định vị (Location Based Services) tích hợp hệ thống định vị toàn cầu GPS, hệ thống thông tin địa lý GIS và bản đồ số đang còn mới mẻ với các nhà cung cấp dịch vụ và phát triển phần mềm tại Việt Nam. Đây là một lĩnh vực rất mở và hứa hẹn mang lại nhiều đột phá không chỉ trong công nghệ mà còn thể hiện tính ưu việt của dịch vụ nhằm đem về những khoản lợi nhuận khổng lồ cho các nhà phát triển Ứng dụng.
Trong bài đồ án này em đã phân nội dung thành 2 phần chính : Phần 1: Lý thuyết chung
Tìm hiểu và trình bày được những thành phần cơ bản nhất để xây dựng được một Ứng dụng Location Based Services trong đó bao gồm giới thiệu tổng quan về dịch vụ Location Based Services, tiếp theo trình bày những thành phần quan trọng để xây dựng lên Ứng dụng LBS đó là hệ thống định vị toàn cầu GPS, Hệ thống thông tin địa lý GIS, bản đồ số, Mạng di động, Internet,….Nội dung cuối cùng là nội dung được đánh giá quan trọng nhất đó là nền tảng middleware cho Ứng dụng LBS phần này em đi khá chi tiết tìm hiểu về định nghĩa middleware, kiến trúc, một số mô hình middleware LBS và tìm hiểu về middleware OpenGIS Consortium(OGC ] Tập đoàn mở GIS ) đây là 1 chuẩn và là nền tảng để phát triển các Ứng dụng LBS.
Phần 2: Ứng dụng
Nội dung đầu em giới thiệu tổng quan về công cụ lập trình trong đó gồm công nghệ J2ME cho phát triển các Ứng dụng trên Mobile, MIDlet phần mềm di động ảo hỗ trợ chạy các Ứng dụng.
Nội dung thứ 2, phát triển và xây dựng Ứng dụng. Nội dung này được chia thành 2 phần nhỏ : Xây dựng hệ quản trị web và phần mềm trên thiết bị di động
Xây dựng hệ quản trị web
+ Module dành cho người quản trị hệ thống + Module quản lý các nhà cung cấp dịch vụ + Kho chứa cơ sở dữ liệu
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD Phần mềm trên thiết bị di động
+ Xây dựng giao diện sử dụng dịch vụ, chức năng cho người dùng sử dụng như : Cập nhật, Liên hệ, Services group nhưng vẫn còn một số chức năng chưa khai thác
+ Một số tính năng nổi bật mà chương trình cung cấp: Từ số điện thoại của nhà cung cấp có trên thông tin của nhà cung cấp người dùng có thể gọi ngay từ chương trình của mình, tính năng nổi bật thứ 2; chương trình có chức năng tìm kiếm nhanh thuận tiện cho người dùng sử dụng dịch vụ
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD Phụ lục Một số lớp mã nguồn chính của chương trình
Lớp DemoMIDlet.java package com.Ungdung.mobile; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.List; import com.Ungdung.mobile.component.*; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; /** * @author * */
publicclass DemoMIDlet extends MIDlet implements CommandListener { private List list;
/**
* @throws RecordStoreException *
*/
public DemoMIDlet() {
list = new List("Dich vu tieu dung", List.IMPLICIT); try {
list.append("ServiceGroups", Image
.createImage("/com/images/services.png")); list.append("Dich vu khac", Image
.createImage("/com/images/kservices.png")); list
.append("Cap nhat", Image .createImage("/com/images/update.png"));
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD list.append("Tro giup", Image
.createImage("/com/images/help.png")); list
.append("Lien he", Image .createImage("/com/images/home.png")); list.append("Thoat", Image .createImage("/com/images/exit.png")); } catch (Exception e) { e.printStackTrace(); } }
public Display getDisplay() {
return Display.getDisplay(this); }
protectedvoid destroyApp(boolean arg0) throws MIDletStateChangeException { }
protectedvoid pauseApp() { }
protectedvoid startApp() throws MIDletStateChangeException { list.setCommandListener(this);
getDisplay().setCurrent(list); }
publicvoid commandAction(Command cmd, Displayable dis) {
// TODO Auto]generated method stub if (cmd.equals(list.SELECT_COMMAND)) {
switch (list.getSelectedIndex()) { case 0: // service group;
new LocalesForm(dis,this); break;
case 2: // update
new UpdateForm(dis,this); break;
case 4:
new AboutForm(dis,this); break;
case 5:
notifyDestroyed(); try {
destroyApp(true);
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD break;
default:
Alert alert=new Alert("Chuc nang dang xay dung","Vui long cho phien ban chinh thuc de duoc su dung.",null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER); getDisplay().setCurrent(alert,dis); break; } } } } Lớp AboutForm.java package com.Ungdung.mobile.component; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.ImageItem; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemCommandListener; import javax.microedition.lcdui.StringItem; import javax.microedition.midlet.MIDlet; import com.Ungdung.mobile.DemoMIDlet;
publicclass AboutForm extends Form implements ItemCommandListener, CommandListener{
private Command call=new Command("Goi",Command.ITEM,1); private DemoMIDlet midlet;
private Displayable backScreen;
public AboutForm(Displayable backScreen, DemoMIDlet dm) {
super("Lien he"); midlet=dm;
midlet.getDisplay().setCurrent(this); this.backScreen=backScreen;
this.append("Lien he voi cong ty TNHH phan mem va dich vu vien thong TELSOFT: ");
StringItem strMobile=new StringItem("So dien thoai:","0437821822"); strMobile.addCommand(call);
strMobile.setItemCommandListener(this);
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
StringItem strAddress=new StringItem("Dia chi:","So 102A2 ] Ngo 125 Trung kinh ] Cau Giay ] Ha noi "); strHomepage.setLayout(Item.HYPERLINK);
strMobile.setLayout(Item.LAYOUT_LEFT); this.append(strMobile);
this.append(strHomepage); this.append(strAddress);
this.addCommand(new Command("Quay lai",Command.BACK,2)); this.setCommandListener(this);
}
publicvoid commandAction(Command cmd, Item item) {
// TODO Auto]generated method stub if (cmd.equals(call)) {
try {
StringItem str=(StringItem)item;
midlet.platformRequest("tel:"+str.getText()); }catch(Exception e){
this.append(e.getMessage()); }
} }
publicvoid commandAction(Command cmd, Displayable display) {
// TODO Auto]generated method stub
if (cmd.getCommandType()==Command.BACK) { midlet.getDisplay().setCurrent(backScreen); } } } Lớp LocalesForm.java package com.Ungdung.mobile.component; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Vector; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Gauge; import javax.microedition.lcdui.List; import javax.microedition.rms.RecordStore; import org.kxml2.kdom.Document;
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD import org.kxml2.kdom.Element; import org.kxml2.kdom.Node; import org.kxml2.wap.WbxmlParser; import org.kxml2.wap.WbxmlSerializer; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import com.Ungdung.mobile.DemoMIDlet; import com.Ungdung.mobile.Roundtrip; import com.Ungdung.rms.RecordManagerUtil;
publicclass LocalesForm extends Form implements Runnable, CommandListener{ private DemoMIDlet midlet;
private Displayable backScreen; private List li;
private Vector vtLocaltion=new Vector(); private Vector vtNode= new Vector();
public LocalesForm(Displayable backScreen,DemoMIDlet midlet) { super("Danh muc dich vu");
this.midlet=midlet;
this.backScreen=backScreen;
Gauge gauge = new Gauge("Loading...", false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING);
this.append(gauge); setCommandListener(this);
midlet.getDisplay().setCurrent(this); new Thread(this).start();
}
publicvoid run() { try {
RecordStore recordStore =
RecordManagerUtil.open(midlet.getAppProperty("RECORD_NAME"), true); if (recordStore.getNumRecords() == 0) {
ByteArrayOutputStream bos = new ByteArrayOutputStream(); XmlPullParser xp = new WbxmlParser();
xp.setInput(getClass().getResourceAsStream("/service.wbxml"),null); XmlSerializer xs= new WbxmlSerializer(); xs.setOutput(bos, null);
new Roundtrip(xp, xs).roundTrip(); byte[] wbxml=bos.toByteArray();
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
recordStore.addRecord(wbxml, 0, wbxml.length); }
byte[] bwml=recordStore.getRecord(1);
ByteArrayInputStream bis=new ByteArrayInputStream(bwml); XmlPullParser xpr=new WbxmlParser();
xpr.setInput(bis,null);
Document doc=new Document(); doc.parse(xpr);
Node nd=doc.getRootElement();
for (int i=1; i<nd.getChildCount(); i++) { int type=nd.getType(i);
if (type==Node.ELEMENT){
Element e=nd.getElement(i);
for (int j=0; j<e.getChildCount(); j++) { int jType=e.getType(j); if (jType==Node.ELEMENT) { Element je=e.getElement(j); if (je.getName().equals("name")) { vtNode.addElement(e); vtLocaltion.addElement(je.getChild(0).toString()); } } } } } RecordManagerUtil.close(recordStore); } catch (Exception e) {
// TODO Auto]generated catch block e.printStackTrace();
}
li=new List("Danh sach khu vuc",List.IMPLICIT);
Command cmdBack = new Command("Quay lai", Command.BACK, 0); li.addCommand(cmdBack);
li.setCommandListener(this);
for (int i=0; i<vtLocaltion.size(); i++) {
li.append(vtLocaltion.elementAt(i).toString(), null); }
midlet.getDisplay().setCurrent(li); }
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD
publicvoid commandAction(Command cmd, Displayable dis) {
// TODO Auto]generated method stub
if (cmd.getCommandType()==Command.BACK) { midlet.getDisplay().setCurrent(backScreen); } if (cmd==li.SELECT_COMMAND) { ServicesForm lc=new ServicesForm(dis,midlet,(Node)vtNode.elementAt(li.getSelectedIndex())); } } } Lớp UpdateForm.java package com.Ungdung.mobile.component; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Gauge; import javax.microedition.lcdui.Item; import javax.microedition.rms.RecordStore; import org.kxml2.wap.WbxmlParser; import org.kxml2.wap.WbxmlSerializer; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import com.Ungdung.mobile.DemoMIDlet; import com.Ungdung.mobile.Roundtrip; import com.Ungdung.rms.RecordManagerUtil;
publicclass UpdateForm extends javax.microedition.lcdui.Form implements Runnable, CommandListener {
private DemoMIDlet midlet; private Displayable backDisplay;
public UpdateForm(Displayable bDis, DemoMIDlet midlet) { super("Cap nhat du lieu");
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD this.backDisplay = bDis;
midlet.getDisplay().setCurrent(this); setCommandListener(this);
Gauge gauge = new Gauge("Dang tai du lieu.... Vui long cho", false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING); this.append(gauge);
Command cmdBack = new Command("Quay lai", Command.BACK, 0); addCommand(cmdBack);
(new Thread(this)).start(); }
publicvoid run() { try {
runImpl(midlet.getAppProperty("LIST_SERVICE")); // Read property // value
this
.append("Cap nhat du lieu thanh cong. Ban da co thong tin moi nhat ve thong tin cac dich vu!"); // of XML location
} catch (Exception ioe) {
this.append(ioe.getMessage()); }
// Remove the gauge.
for (int i = 0; i < this.size(); i++) { Item item = this.get(i); if (item instanceof Gauge)
this.delete(i]]); }
}
publicvoid runImpl(String url) throws Exception {
HttpConnection hc = (HttpConnection) Connector.open(url); try {
InputStream in = hc.openInputStream();
if (hc.getResponseCode() == HttpConnection.HTTP_OK) { try {
XmlPullParser xp = new WbxmlParser(); xp.setInput(in, null);
XmlSerializer xs = new WbxmlSerializer(); ByteArrayOutputStream bos = new
ByteArrayOutputStream();
xs.setOutput(bos, null);
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD byte[] wbxml = bos.toByteArray(); RecordStore recordStore = RecordManagerUtil.open(midlet.getAppProperty("RECORD_NAME"), true); if (recordStore.getNumRecords()>0) { RecordManagerUtil.close(recordStore); RecordManagerUtil.delete(midlet.getAppProperty("RECORD_NAME")); recordStore = RecordManagerUtil.open(midlet.getAppProperty("RECORD_NAME"), true); } recordStore.addRecord(wbxml, 0, wbxml.length); RecordManagerUtil.close(recordStore); } finally { in.close(); } }else {
thrownew Exception("Khong the cap nhat du lieu moi. Vui long thu lai sau."); }
} finally {
hc.close(); }
}
publicvoid commandAction(Command cmd, Displayable arg1) {
// TODO Auto]generated method stub
if (cmd.getCommandType() == Command.BACK) { midlet.getDisplay().setCurrent(backDisplay); } } } Lớp ServicesForm.java package com.Ungdung.mobile.component; import java.util.Vector; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.List;
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;
import com.Ungdung.mobile.DemoMIDlet;
publicclass ServicesForm extends List implements CommandListener{ private DemoMIDlet midlet;
private Displayable backDisplay; private Node ndService;
private Vector vtNode=new Vector();
public ServicesForm(Displayable bDisplay, DemoMIDlet dm, Node nd) { super("Khu vuc dich vu",List.IMPLICIT);
// TODO Auto]generated constructor stub backDisplay=bDisplay;
midlet=dm;
midlet.getDisplay().setCurrent(this); ndService=nd;
Command cmdBack = new Command("Quay lai", Command.BACK, 0); addCommand(cmdBack);
setCommandListener(this);
for (int i=0; i<ndService.getChildCount(); i++) { int type=ndService.getType(i);
if (type==Node.ELEMENT){
Element e=ndService.getElement(i); for (int j=0; j<e.getChildCount(); j++) {
int jType=e.getType(j); if (jType==Node.ELEMENT) { Element je=e.getElement(j); if (je.getName().equals("name")) { vtNode.addElement(e); this.append(je.getChild(0).toString(), null); } } } } } }
publicvoid commandAction(Command cmd, Displayable dis) {
// TODO Auto]generated method stub
if (cmd.getCommandType()==Command.BACK) { midlet.getDisplay().setCurrent(backDisplay);
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD }
if (cmd==this.SELECT_COMMAND) {
ProducerSearch pr=new ProducerSearch(this,midlet, (Node)vtNode.elementAt(this.getSelectedIndex()));
} } } Lớp ProducesSearch.java package com.Ungdung.mobile.component; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemCommandListener; import javax.microedition.lcdui.ItemStateListener; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; import org.kxml2.kdom.Element; import org.kxml2.kdom.Node; import com.Ungdung.mobile.DemoMIDlet;
publicclass ProducerSearch extends Form implements CommandListener, ItemStateListener, ItemCommandListener {
private DemoMIDlet midlet; private Displayable backDisplay; private Node ndPro;
private TextField txtSearch;
Command cmdSelect= new Command("Chon", Command.ITEM, 0);
public ProducerSearch(Displayable bDisplay, DemoMIDlet dm, Node nd) { super("Danh sach cua hang");
// TODO Auto]generated constructor stub backDisplay = bDisplay;
midlet = dm;
midlet.getDisplay().setCurrent(this); ndPro = nd;
txtSearch = new TextField("", "", 30, TextField.ANY); setCommandListener(this);
setItemStateListener(this); this.append(txtSearch);
Sinh viên TH : Nguyễn Nho Bình – Lớp 49PM2 ĐHXD addCommand(cmdBack);
for (int i = 0; i < ndPro.getChildCount(); i++) { int type=ndPro.getType(i);
if (type==Node.ELEMENT){
Element e=ndPro.getElement(i); String strName="";
String strAddress="";
for (int j=0; j<e.getChildCount(); j++) { int jType=e.getType(j); if (jType==Node.ELEMENT) { Element je=e.getElement(j); if (je.getName().equals("name")) { strName=je.getChild(0).toString(); }elseif (je.getName().equals("address")) { strAddress=je.getChild(0).toString(); } } }
ProducerItem producerItem=new ProducerItem(strName,strAddress,e); producerItem.addCommand(cmdSelect); producerItem.setItemCommandListener(this); this.append(producerItem); } } }
publicvoid commandAction(Command cmd, Displayable display) {