Android中实现手机号码归属地查询的示例代码

分类:手机开发| 发布:佚名| 查看:299 | 发表时间:2014/10/29

目前手机里面的号码归属地查询主要是通过两种方式:1.联网查询,2.匹配本机归属地数据库。

我认为两种结合方式最好,在本地数据库中匹配不到的在进行联网查询,能大大增加匹配效果,并且不用过于增加本地数据库容量而增大安装包大小。

步骤:1.开启软件的时候把数据库从assets目录拷贝到files目录下,如果已存在,则不用重新拷贝。

2.实现界面。

3.实现工具类PhoneAddressUtils的getPhoneAddress()方法

4.在界面类activity里调用工具类方法得到地址兵显示出来。

 

首先是复制数据库的操作:

01private void copyDB() {
02    File file = new File(getFilesDir(), "address.db");
03    if(file.exists()&&file.length()>0) {
04        Toast.makeText(this, "已经复制数据库", 0).show();
05    } else {
06        try {
07            AssetManager am = getAssets();
08              
09            byte[] buffer = new byte[1024];
10            InputStream is = am.open("address.db");
11            FileOutputStream fis = new FileOutputStream(file);
12            int len = 0;
13            while((len=is.read(buffer))>0) {
14                fis.write(buffer, 0, len);
15            }
16        } catch (IOException e) {
17            // TODO Auto-generated catch block
18            e.printStackTrace();
19        }
20    }
21}


因为运行中工具类得不到assets目录下的文件,所以要在在开机启动的SplashActivity中把数据库拷贝到files目录下。

获得assert目录下的文件要用AssetManager对象的open()方法,打开文件返回输入流。

实现界面:就一个简单的输入框,按钮,显示框就行。

工具类:

01package com.itheima.mobilesafe.db.dao;
02  
03import android.database.Cursor;
04import android.database.sqlite.SQLiteDatabase;
05  
06public class AddressDao {
07    private static String path = "data/data/com.itheima.mobilesafe/files/address.db";
08    public static String getAddress(String number) {
09          
10        String address = number;
11        if(number.matches("^1[34568]\d{9}$")) {
12            String sql = "select location from data2 where id = (select outkey from data1 where id= ?)";   
13            SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
14            Cursor cursor = database.rawQuery(sql, new String[] {number.substring(0, 7)});
15            while(cursor.moveToNext()) {
16                address = cursor.getString(0);
17            }
18            cursor.close();
19            database.close();
20        } else {
21            address = "不是手机号码";
22        }
23          
24        return address;
25    }
26}

调用显示:

点击按钮时:

1public void queryAddress(View view) {
2        String number = et_phone.getText().toString();
3        String address = AddressDao.getAddress(number);
4        et_address.setText(address);
5    }

但是我们要动态的显示位置,所以要对输入框加一个TextChangedListener,当输入字符串大于3的时候,自动调用进行匹配显示出来。

01et_phone.addTextChangedListener(new TextWatcher() {
02      @Override
03      public void onTextChanged(CharSequence s, int start, int before, int count) {
04          // TODO Auto-generated method stub
05          if(s.length()>3) {
06              String address = AddressDao.getAddress(s.toString());
07              et_address.setText(address);
08          }
09      }
10        
11      @Override
12      public void beforeTextChanged(CharSequence s, int start, int count,
13              int after) {
14          // TODO Auto-generated method stub
15            
16      }
17        
18      @Override
19      public void afterTextChanged(Editable s) {
20          // TODO Auto-generated method stub
21            
22      }
23  });
365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/mobile-dev/1703.html