萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> Android中手機號碼歸屬地查詢實現

Android中手機號碼歸屬地查詢實現

 這部分是昨天學習的,但是因為眼睛超負荷所以拖到現在,以後要合理規劃時間。

目前手機裡面的號碼歸屬地查詢主要是通過兩種方式:1.聯網查詢,2.匹配本機歸屬地數據庫。

我認為兩種結合方式最好,在本地數據庫中匹配不到的在進行聯網查詢,能大大增加匹配效果,並且不用過於增加本地數據庫容量而增大安裝包大小。

步驟:1.開啟軟件的時候把數據庫從assets目錄拷貝到files目錄下,如果已存在,則不用重新拷貝。

2.實現界面。

3.實現工具類PhoneAddressUtils的getPhoneAddress()方法

4.在界面類activity裡調用工具類方法得到地址兵顯示出來。

 

首先是復制數據庫的操作:

 

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 private void copyDB() {     File file = new File(getFilesDir(), "address.db");     if(file.exists()&&file.length()>0) {         Toast.makeText(this, "已經復制數據庫", 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中把數據庫拷貝到files目錄下。

 

獲得assert目錄下的文件要用AssetManager對象的open()方法,打開文件返回輸入流。

 

實現界面:就一個簡單的輸入框,按鈕,顯示框就行。

 

工具類:

 

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 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;     } }

 

 

調用顯示:

點擊按鈕時:

 

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

但是我們要動態的顯示位置,所以要對輸入框加一個TextChangedListener,當輸入字符串大於3的時候,自動調用進行匹配顯示出來。

 

 

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 et_phone.addTextChangedListener(new TextWatcher() {                           @Override             public void onTextChanged(CharSequence s, int start, int before, int count) {
copyright © 萬盛學電腦網 all rights reserved