实例"/>
Android实例
一、目标
1、处理110、10086、座机等非手机号码的归属地;
2、在号码文本框中当输入规定的长度时开始自动查询
二、代码实现
1、判断输入框中的文本是否符合手机号码的格式(1开头,第二位是345678,后面9位均为0-9的整数),根据手机号码的特点确定其正则表达式为“1[345678]\d{9}”,在代码中正则表达式以“^”开头,以“$”结束,同时里面的“\”需要转义,所以判断条件为“^1[345678]\\d{9}$”。上述正则表达式说明:[345678]表示“[]”里面的数任取一个,\d表示0-9的数任取一个,{9}表示前面的\d正好匹配9次。
2、在号码归属地查询工具类(NumberAddQueryUtils)的查询号码queryNumber(String number)方法中,在查询数据库之前将传入的号码(number)通过其matches(String regularExpression)方法
判断一下是否匹配手机号码的正则表达式,如匹配则查询数据库,如不匹配则查询另外的数据库(如110、10086、座机等);
手机号码的正则表达式:
1 number.matches("^1[345678]\\d{9}$")View Code
3、通过传入的号码(number)的startsWith(String prefix)方法判断号码是否以“0”开头,若成立则截取号码前4位查询data2中的area获取归属地,再将归属地的后两位(电信、联通、移动)去除便可得到城市名,最后返回该值即可,另外需要处理010、021等3位数区号的特殊例子;
处理座机的代码:
1 //处理座机 2 if(number.startsWith("010")){ 3 location = "北京"; 4 }else if (number.startsWith("021")) { 5 location = "上海"; 6 }else if(number.startsWith("0")){ 7 Cursor cursor = database.rawQuery( 8 "select location from data2 where area = ?", 9 new String[] { number.substring(1, 4) }); 10 while (cursor.moveToNext()) { 11 location = cursor.getString(0).substring(0, cursor.getString(0).length()-2); 12 } 13 cursor.close(); 14 }View Code
4、根据文本框内容自动开始查询
(1)在号码归属地查询页面(NumberAddQueryActivity)中实例化号码输入框(number_query_phone)后,通过EditText对象的addTextChangedListener(TextWatcher watcher)方法为其增加文本改变的监听器,参数TextWatcher watcher为接口,因此通过new 实例化后还要实现其未实现的方法;
(2)在实现TextWatcher对象中未实现的方法中,beforeTextChanged()文本变化之前回调的方法,onTextChanged()表示文本变化时回调的方法,afterTextChanged()表示文本变化之后回调的方法。因此,在文本变化时onTextChanged(CharSequence s, int start, int before,int count)方法中,根据文本(CharSequence s)的内容(不为空)和长度(大于2)执行数据库查询操作,并将返回值放入显示框;
onTextChanged()方法代码如下:
1 public void onTextChanged(CharSequence s, int start, int before, 2 int count) { 3 if(!TextUtils.isEmpty(s)&&s.length()>2){ 4 String location = NumberAddQueryUtils.queryNumber(s.toString()); 5 show_number_add.setText(location); 6 } 7 }View Code
转载于:.html
更多推荐
Android实例
发布评论