你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
手机归属地查询
 

君锋

摘 要 本文是对基于J2ME技术的手机归属地查询程序开发实例的简析,介绍一些MIDP高级UI的使用以及文件、字符串的操作,还介绍了开发过程中的一些心得和体会,希望可以跟初学者分享。

关键词 J2MEMIDP,文件流、字符串操作

一、引言

在计算机技术突飞猛进发展的今天,移动设备的程序开发变得越来越受开发者的青睐。本文使用Java语言中的J2ME技术,开发了一个基于移动设备的实用实例程序。程序的功能实现了对全国手机号码归属地和归属地区号的查询。实例中主要用到了部分MIDP高级UI,文中没有花大量的篇幅介绍J2ME技术的基础知识,而是简单介绍本实例的开发环境和本实例用到的部分MIDP高级UI开发基础。对于实例中的实际开发经验和技巧是本文的重点,贯穿文章始终。本实例代码短小精练,注释详尽明了,希望对广大J2ME初学者提供一定的参考。

二、开发环境和运行环境

在开发J2ME应用程序之前,必须选择这些程序的开发平台,J2ME开发平台有很多,比如WTKEclipseSunOneJbuilder等。本实例选择了JbuilderX它自带了MobileSet,内附J2ME Wireless Toolkit2.0,所以开发人员仅需简单配置好环境变量,便可直接进入JbuilderX进行开发了。因为开发的时候使用的模拟器是系统默认的,所以不需要设置J2ME,而对于JbuilderX的一个天然的瑕疵——光标定位问题。笔者进行了改进,两个步骤:首先打开菜单Tools -> Editor options -> color ->,然后Symbol Attributes Bold 前的勾去掉,这样就可以正常编写代码。

在开发J2ME应用程序之前,还必须选择这些程序运行的平台,亦即开发出来的J2ME程序运行在那一种手机或者是移动设备上面。在开发的过程中,需要对J2ME应用程序进行测试,大多数的J2ME开发环境都提供了各种各样的手机、移动设备模拟器,开发者可以首先在手机模拟器上测试J2ME程序。模拟器和真实的设备之间有一定的差别,但是程序只要在模拟器上通过了,那么问题不会很大。

J2MEWTK提供六种模拟器,分别是:Default Color PhoneDefault GrayPhoneMinimum PhoneMotolola i85sPalmOS DeviceRIM Java Handle。这些模拟器虽然外观不一样,操作也不太一样,但是J2ME程序在其上运行的结果是不会有什么区别的,在真实的设备上也是没有什么区别的。

三、部分MIDP高级UI开发

在本实例,主要用到了以下高级UI

FormForm J2ME 里面一个比较重要的容器类型,可以说是集中了高级UI 中的精华,是开发当中常用的一个关键类,如图1是Form 及其相关子类的关系。通常是往Form 里面添加Item 的子类(使用append()方法),从而达到让画面更加丰富的目的,每一个Item 的子类在同一时刻只能属于同一个容器,否则会引发异常。

Form

Item

ItemStateListener

ItemCommandListener

Spacer

StringItem

ImageItem

CustomItem

ChoiceGroup

DateField

Gauge

TextField

图1 Form 及其相关子类的关系

 

StringItem StringItem的作用就是在屏幕上显示一串字符,配合不同的外观类型,StringItem可以用按钮或者超级链接的外观呈现。StringItem有两个构造函数,其中需要三个参数的构造函数,第一个参数是该ItemLabel;第二个是内容;第三个则是外观。外观有三种选择:PLANBUTTON以及HYPERLINK。需要两个参数的构造函数等同于使用PLAIN类型的外观。由于这些StringItem没有和Command关联在一起,所以即使使用三种不同的外观,但是看起来却没有什么不同。随时可以利用getAppearanceMode()取得StringItem所选用的外观。利用getFont()/setFont()可以用来取得/设定字型。getText()/setText()可以用来取得/设定内容。如果要存取Label,则必须使用定义与Item之中的getLabel()/setLabel()

TextField:在用户有数据输入时,可以选择使用TextField输入单行数据。TextField的构造函数共有四个,第一个是TextField的标题;第二个是TextField的初始化内容;第三个是允许输入字符的最大长度(不管中文还是字母,都算一个字,因为Java是采用Unicode来表示文字的);第四个是限制类型。TextField的内容可以在程序中使用setString()/getString()来设定或者取出。最大长度可以在程序中使用getMaxSize()/setMaxSize()来取出或者设定内容。Size()可以查出目前内容的长度。用来限制TextField类型很多,如TextField.NUMERIC只允许输入数字,这里将一一讲解。

这里关于TextField有两点经验:TextField的最大长度和限制类型,有些开发者指定最大的长度为8,可是在初始化内容却超过8个字。此时就会引发IllegalArgumentException,如果限制的类型和初始化的类型不一致,也会引发IllegalArgumentExceptionTextField初始化数据后,在计算机上模拟运行时候,运行结果正确,而安装到移动设备里面运行时,程序初始化后就卡住了,也不提示错误。后经查实,是WKT版本不匹配造成,为了增强程序的兼容性,建议尽量不初始化数据。

TickerTicker是一个类似跑马灯的类,所有Displayable类的类都可以加入Ticker。可以利用定义在Displayable类中的setTicker()来设定画面上的Ticker,或者用getTicker()取出画面内含的Ticker对象。

 


四、程序实现

关于本实例的算法比较简单,我国手机号码归属地城市名称和区号为11的关系,手机号码的分配是以号码前7位为单位的。这样手机号码的前7位就是可以找到归属地。在程序里面定义了一个二维字符数组qh[][]qh[0][i]存放归属地的唯一区号,区号前面的0未保留,qh[1][i]存放归属地省份名称,qh[2][i]存放归属地二级城市名称,因为这个数据是一个比较固定的不大的数据。笔者采用数组存储,这样也对数据的安全有一定的作用。

手机号码段的存放是在data文件夹下面的文件中,文件名的命名规则是phone*.txt*为手机号码服务商的前3为,如phone131.txt就中国联通131号码段的数据文件。文件里面的格式是固定的(如图2所示)。

起始号码段

结束号码段

区号

|

图2 号码在文件中的格式

phone131.txt文件中有……0010,0190,10|……,13100101310190号码段归属地为区号为010的城市北京。

程序框架如图3所示,在主界面有查询、关于、退出菜单,等待用户输入,选择查询就可以显示查询结果,并转到查询结果界面,然后用户可以选择返回和退出。

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089