现在的位置: 首页 > 综合 > 正文

快速开发10之归属地查询——自带数据库查询类和数据库不用联网

2017年05月17日 ⁄ 综合 ⁄ 共 2311字 ⁄ 字号 评论关闭

去数据库查询号码归属地

1.网络查询 

2.本地的数据库--数据库写一个工具类,去查询数据库

对于现在时代能不用流量就不用啊,所以选择第二种重点是因为在安卓里面 数据库必须放在asset里面而要找到必须先初始化拷贝进去

在activity初始化的时候 加入
copyDB();方法

/**
* //path 把address.db这个数据库拷贝到data/data/《包名》/files/address.db
*/
	private void copyDB() {
		//只要你拷贝了一次,我就不要你再拷贝了
		try {
			//得到目录
			File file = new File(getFilesDir(), "address.db");
			if(file.exists()&&file.length()>0){
				//正常了,就不需要拷贝了
				Log.i(TAG, "正常了,就不需要拷贝了");
			}else{
				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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

其中还有万能代码,基本上输入输出是基本搞得定

接下来的代码 查询数据库的类 可以直接复制进你的项目中

NumberAddressQueryUtils

package com.xiaoxin.MobleSafe.dao;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class NumberAddressQueryUtils {

	private static String path = "data/data/com.xiaoxin.MobleSafe/files/address.db";

	/**
	 * 传一个号码进来,返回一归属地回去
	 * 
	 * @param number
	 * @return
	 */
	public static String queryNumber(String number) {
		String address = number;
		// path 把address.db这个数据库拷贝到data/data/《包名》/files/address.db
		SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
				SQLiteDatabase.OPEN_READONLY);
		// 手机号码 13 14 15 16 18
		// 手机号码的正则表达式
		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:
				// 5554
				address = "模拟器";
				break;
			case 5:
				// 10086
				address = "客服电话";
				break;
			case 7:
				//
				address = "本地号码";
				break;

			case 8:
				address = "本地号码";
				break;

			default:
				// /处理长途电话 10
				if (number.length() > 10 && number.startsWith("0")) {
					// 010-59790386
					Cursor cursor = database.rawQuery(
					"select location from data2 where area = ?",
					new String[] { number.substring(1, 3) });

			while (cursor.moveToNext()) {
		<span style="white-space:pre">	</span>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;
	}

}

数据库的问题,你可以去某宝买一个也不贵20元 

抱歉!评论已关闭.