Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android聯系人中添加歸屬地分組

Android聯系人中添加歸屬地分組

編輯:關於Android編程


之前重要負責收集聯系人添加歸屬地,公司這兩個智能分組;網上的實現方法很多,有說通過webserver來查詢,但是網絡這種形式不是長遠之道;畢竟服務器不是你自己的,還有其他很多的各種不穩定因素。那下面,就主要介紹歸屬地這個分組我是怎麼實現的。

經過自己制作一個第三方的歸屬地數據庫來實現的。我使用的全國手機歸屬地數據記錄是2013年中旬的,當時弄到數據後嚇壞,全國的手機歸屬地記錄總共有28.6w多條。正常情況下,每個手機存儲的聯系人數一般是100+多個人。我采取的方式是,先把所有的歸屬地信息全部查出來然後保存在配置文件,如果有添加修改聯系人的操作就刷新全部刷新配置文件。一百多個人全部刷新大概是4~5s左右,幾十個人的話用戶幾乎感覺不到。所以,這個效率是可行的。下面開始介紹我使如何制作第三方數據庫(程序運行把數據庫拷貝到data目錄對應包名下)和對數據處理的。

首先我們先分析一下手機號碼,手機號碼的前七位中的前三位是運營商信息,前七位中的後四位是歸屬地信息。因此,對於這麼多數據我們應該盡可能的細分為小的模塊,使得每次查詢時的范圍減少才能提高效率。下面列出各個運營商的號碼數:

數據總數 286764條
電信133 -> 9648 電信153 -> 9818 電信180 -> 9577 電信189 -> 9988
電信181 -> 8263 移動134 -> 9694 移動135 -> 10000 移動136 -> 10000
移動137 -> 9976 移動138 -> 9994 移動139 -> 9998 移動150 -> 10000
移動151 -> 10000 移動152 -> 10000 移動157 -> 7096 移動158 -> 10000
移動159 -> 10000 移動182 -> 9960 移動183 -> 9975 移動184 -> 4879
移動187 -> 9980 移動188 -> 9546 聯通130 -> 9884 聯通131 -> 10000
聯通132 -> 9804 聯通155 -> 10000 聯通156 -> 9781 聯通185 -> 6983
聯通186 -> 9684 數據卡145 -> 5883 數據卡147 -> 6358

到這裡你們應該知道我的想法了,那就是把二十八萬條數據按照前三位的不同篩選出來分別插到31個表裡面去(寫代碼從文件讀出來插進去,前後要花費幾個小時這樣)。最後我的第三方數據庫中所有的表名為:

d-->電信 l-->聯通 s-->聯通數據卡 y-->移動
public static final String[] TableArray = new String[]{
d133,d153,d180,d181,d189,
l130,l131,l132,l155,l156,l185,l186,
s145,s147,
y134,y135,y136,y137,y138,y139,y150,y151,y152,y157,y158,y159,y182,y183,y184,y187,y188
};

表的結構如下(導出DB後Sqliteman工具打開DB文件查看):

\

每當從數據庫取得的號碼為13755555551,我們取得他的前三位為:137,那麼我們就應該取它的前七位:1375555去表“y137查詢歸屬地信息。我的邏輯是如果號碼不夠11位不進行查詢,就列入無地址信息項;如果查詢後沒有記錄也列入無地址信息項。

這樣做出來的db有8M左右,很大,效率已經可以接受;下一片文章將會再次對數據進行瘦身,爭取壓縮到1M左右。初步估算28w條記錄將會被壓縮成7W行,查詢效率性能將會質的提升。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved