淺析Android手機衛(wèi)士之號碼歸屬地查詢
使用小米號碼歸屬地數(shù)據(jù)庫,有兩張表data1和data2
先查詢data1表,把手機號碼截取前7位
select outkey from data1 where id=”前七位手機號”
再查詢data2表,
select location from data2 where id=”上面查出的outkey”
可以使用子查詢
select location from data2 where id=(select outkey from data1 where id=”前7位手機號”)
創(chuàng)建數(shù)據(jù)庫工具類
新建一個包xxx.db.dao
新建一個類NumberAddressUtils,新建一個靜態(tài)方法queryNumber
調(diào)用SQLiteDatabase.openDatabase()方法,獲取到SQLiteDatabase對象,參數(shù):數(shù)據(jù)庫路徑(/data/data/包名/files/xxx.db),游標工廠(null),打開方式(SQLiteDatabse.OPEN_READONLY)
把數(shù)據(jù)庫address.db拷貝到 /data/data/包名/files/目錄里面
調(diào)用SQLiteDatabase對象的rawQuery()方法,獲取到Cursor對象,查詢數(shù)據(jù),參數(shù):sql語句,string[]條件數(shù)組
例如:select location from data2 where id=(select outkey from data1 where id=?) ,new String[]{phone.subString(0,7)}
while循環(huán)Cursor對象,條件調(diào)用Cursor對象的moveToNext()方法
循環(huán)中調(diào)用Cursor對象的getString()方法,傳入字段索引
關閉游標Cursor對象的close()方法
把得到的地址返回出去
拷貝數(shù)據(jù)庫從assets目錄到data目錄
在歡迎頁面,進行拷貝
調(diào)用getAssets().open()方法,得到InputStream對象,參數(shù):xxx.db文件名
獲取File對象,new出來,參數(shù):getFilesDir()獲取到/data/data/包/files/目錄,xxx.db
獲取FileOutputStream對象,new出來,參數(shù):File對象
定義緩沖區(qū)byte[] buffer,一般1024
定義長度len
while循環(huán)讀取,條件:讀入的長度不為-1
循環(huán)中調(diào)用FileOutputStream對象的write()方法,參數(shù):緩沖區(qū),從0開始,len長度
調(diào)用InputStream對象的close()方法
判斷只要存在和長度大于0就不再拷貝了,調(diào)用File對象的exist()方法和length()方法大于0
NumberQueryAddressUtil.java
package com.qingguow.mobilesafe.utils; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class NumberQueryAddressUtil { private static final String path = "/data/data/com.qingguow.mobilesafe/files/address.db"; /** * 查詢號碼歸屬地 * @param phone * @return */ public static String queryAddress(String phone){ SQLiteDatabase db=SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY); Cursor cursor=db.rawQuery("select location from data2 where id=(select outkey from data1 where id=?)", new String[]{phone.substring(0,7)}); while(cursor.moveToNext()){ String address=cursor.getString(0); return address; } cursor.close(); return ""; } }
拷貝數(shù)據(jù)庫
private void copyAddressDatabase() { try { //判斷是否存在 File file = new File(getFilesDir(), "address.db"); if (file.exists() && file.length() > 0) { return; } InputStream is = getAssets().open("address.db"); FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } is.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } }
推薦閱讀:
深入淺析Android手機衛(wèi)士保存密碼時進行md5加密
詳解Android 手機衛(wèi)士設置向?qū)ы撁?/a>
淺析Android手機衛(wèi)士接收短信指令執(zhí)行相應操作
淺析Android手機衛(wèi)士之手機實現(xiàn)短信指令獲取位置
以上內(nèi)容是小編給大家介紹的Android手機衛(wèi)士之號碼歸屬地查詢的相關內(nèi)容,希望對大家有所幫助!
- Android組件WebView編寫有道詞典小案例分享
- Android 有道詞典的簡單實現(xiàn)方法介紹
- Android優(yōu)化查詢加載大數(shù)量的本地相冊圖片
- Android手機號碼歸屬地的查詢
- Android編程實現(xiàn)號碼歸屬地查詢的方法
- Android編程操作聯(lián)系人的方法(查詢,獲取,添加等)
- Android中的SQL查詢語句LIKE綁定參數(shù)問題解決辦法(sqlite數(shù)據(jù)庫)
- Android 軟件自動更新功能實現(xiàn)的方法
- android實現(xiàn)倒計時功能代碼
- Android實現(xiàn)上傳文件功能的方法
- Android實現(xiàn)有道辭典查詢功能實例詳解
相關文章
Android studio 使用Debugger問題(代碼中含有ndk)
這篇文章主要介紹了Android studio 使用Debugger問題(代碼中含有ndk),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-1121天學習android開發(fā)教程之SurfaceView與多線程的混搭
21天學習android開發(fā)教程之SurfaceView與多線程的混搭,感興趣的小伙伴們可以參考一下2016-02-02Android編程實現(xiàn)的身份證、車牌號正則驗證工具類實例
這篇文章主要介紹了Android編程實現(xiàn)的身份證、車牌號正則驗證工具類,結(jié)合實例形式分析了java針對身份證、車牌號數(shù)字字符串正則驗證操作技巧,需要的朋友可以參考下2017-12-12Android 使用SharePerference判斷是否為第一次登陸的實現(xiàn)代碼
很多app中在第一次安裝登陸時會有引導歡迎界面,第二次打開時就不再顯示引導頁面。這個怎么實現(xiàn)呢?下面小編給大家介紹下使用SharePerference判斷是否為第一次登陸的實現(xiàn)代碼,需要的的朋友參考下吧2017-03-03Kotlin協(xié)程flowOn與線程切換超詳細示例介紹
這篇文章主要介紹了Kotlin協(xié)程flowOn與線程切換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-09-09Android EditText實現(xiàn)扁平化的登錄界面
這篇文章主要為大家詳細介紹了Android EditText實現(xiàn)扁平化的登錄界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12