归属地查询有几种可以查询到,
第一种:联网查询;
第二种:把数据库 放在本地;
我主要用这一片文章对数据库的练习下,真心觉得数据库这方面比较弱........................
首先呢,我们把从网上找到的数据库存在 assets目录下,这个文件主要放一些MP3啥的东西,
第一步,因为放在assets目中 我们是无法访问到的,所以我们要先把数据库文件copy到app自身默认的文件中
/**
* 拷贝数据库
*/
private void CopyDb() {
try {
//先判断下默认路径下,是否存在
File file = new File(getFilesDir(), "address.db");
if (file.exists()&& file.length() > 0) {
//正常不需要拷贝
}else{//利用io流转到默认路径
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 (IOException e) {
e.printStackTrace();
}
}
然后我们看下布局 ,也很简单就是一个Edittext输入你要查询的号码,然后button点击 去查询,最后显示在textview
在button的点击事件中 利用sql语句去查询结果,
String phone = editText.getText().toString().trim();
String number = NumberAddressQuryUtils.queryNumber(phone);
这里我们要专门建立一个数据库类去查询。
package com.example.Darkbutton;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class NumberAddressQuryUtils {
//数据库默认路径
private static String path = "data/data/com.example.Darkbutton/files/address.db";
/**
* 传一个号码进来,返回一个归属地回去
*
* @param number
* @return
*/
public static String queryNumber(String number) {
String address=number;
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
//手机号码的正则表达式
if (number.matches("^1[34568]\\d{9}$")) {
//手机号码
Cursor cursor = database.rawQuery(
"select location from data2 where id = (select outkey from data1 where id = ?)",
new String[] { number.substring(0, 7) });
while (cursor.moveToNext()) {
String location = cursor.getString(0);
address=location;
}
cursor.close();
}else{
//其他号码
switch (number.length()) {
case 3:
//110
address="匪警号码";
break;
case 4:
//554
address="模拟器";
break;
case 5:
//10086
address="客服电话";
break;
case 7:
//100x
address="本地号码";
break;
case 8:
//10086
address="本地号码";
break;
default:
//处理长度电话10
if (number.length()>10&&number.startsWith("0")) {
Cursor cursor = database.rawQuery(
"select location from data2 where area = ?",
new String[] { number.substring(1, 3) });
while (cursor.moveToNext()) {
String location = cursor.getString(0);
address = location.substring(0, location.length() - 2);
}
cursor.close();
// 0855-59790386
cursor = database.rawQuery(
"select location from data2 where area = ?",
new String[] { number.substring(1, 4) });
while (cursor.moveToNext()) {
String location = cursor.getString(0);
address = location.substring(0, location.length() - 2);
}
}
break;
}
}
return address;
}
}
End