Android中手機號碼歸屬地查詢實現(xiàn)

字號:


    這部分是昨天學習的,但是因為眼睛超負荷所以拖到現(xiàn)在,以后要合理規(guī)劃時間。
    目前手機里面的號碼歸屬地查詢主要是通過兩種方式:1.聯(lián)網(wǎng)查詢,2.匹配本機歸屬地數(shù)據(jù)庫。
    我認為兩種結合方式最好,在本地數(shù)據(jù)庫中匹配不到的在進行聯(lián)網(wǎng)查詢,能大大增加匹配效果,并且不用過于增加本地數(shù)據(jù)庫容量而增大安裝包大小。
    步驟:1.開啟軟件的時候把數(shù)據(jù)庫從assets目錄拷貝到files目錄下,如果已存在,則不用重新拷貝。
    2.實現(xiàn)界面。
    3.實現(xiàn)工具類PhoneAddressUtils的getPhoneAddress()方法
    4.在界面類activity里調用工具類方法得到地址兵顯示出來。
    首先是復制數(shù)據(jù)庫的操作:
    private void copyDB() {
    File file = new File(getFilesDir(), "address.db");
    if(file.exists()&&file.length()>0) {
    Toast.makeText(this, "已經(jīng)復制數(shù)據(jù)庫", 0).show();
    } else {
    try {
    AssetManager am = getAssets();
    byte[] buffer = new byte[1024];
    InputStream is = am.open("address.db");
    FileOutputStream fis = new FileOutputStream(file);
    int len = 0;
    while((len=is.read(buffer))>0) {
    fis.write(buffer, 0, len);
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    因為運行中工具類得不到assets目錄下的文件,所以要在在開機啟動的SplashActivity中把數(shù)據(jù)庫拷貝到files目錄下。
    獲得assert目錄下的文件要用AssetManager對象的open()方法,打開文件返回輸入流。
    實現(xiàn)界面:就一個簡單的輸入框,按鈕,顯示框就行。
    工具類:
    package com.itheima.mobilesafe.db.dao;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    public class AddressDao {
    private static String path = "data/data/com.itheima.mobilesafe/files/address.db";
    public static String getAddress(String number) {
    String address = number;
    if(number.matches("^1[34568]\d{9}$")) {
    String sql = "select location from data2 where id = (select outkey from data1 where id= ?)";
    SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
    Cursor cursor = database.rawQuery(sql, new String[] {number.substring(0, 7)});
    while(cursor.moveToNext()) {
    address = cursor.getString(0);
    }
    cursor.close();
    database.close();
    } else {
    address = "不是手機號碼";
    }
    return address;
    }
    }
    調用顯示:
    點擊按鈕時:
    public void queryAddress(View view) {
    String number = et_phone.getText().toString();
    String address = AddressDao.getAddress(number);
    et_address.setText(address);
    }
    但是我們要動態(tài)的顯示位置,所以要對輸入框加一個TextChangedListener,當輸入字符串大于3的時候,自動調用進行匹配顯示出來。
    et_phone.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    if(s.length()>3) {
    String address = AddressDao.getAddress(s.toString());
    et_address.setText(address);
    }
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {
    // TODO Auto-generated method stub
    }
    @Override
    public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    }
    });