在SplashActivity中拷贝数据库到data/data/包名/files/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) {
e.printStackTrace();
}
}
注意API:getFileDir的用法。以及复制asset目录下的文件的方法。
然后使用去查询:
package com.ustc.mobilemanager.db.dao;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class NumberAddressQueryUtils {
private static String path = "data/data/com.ustc.mobilemanager/files/address.db";
/**
*
* 传一个号码进来,查询号码的归属地
*
* @param number
* @return
*/
public static String queryNumber(String number) {
String address = number;
// path 把数据库拷贝到data/data/包名/files/address.db
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
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();
return address;
}
}
最后是调用:
/**
*
* 查询号码归属地的按钮的点击事件
*
*
* @param view
*/
public void query(View view){
String phoneNumber = ed_phone.getText().toString().trim();
if (TextUtils.isEmpty(phoneNumber)) {
//
Toast.makeText(this, "号码为空!", Toast.LENGTH_LONG).show();
return;
}else {
//数据库查询号码归属地
//写一个工具类,去查询数据库
String address = NumberAddressQueryUtils.queryNumber(phoneNumber);
Log.i(TAG, "查询的号码为:" + phoneNumber);
address_result.setText(address);
}
}
查询的结果: