Android属于查询执行情况的电话号码
这部分是昨天学习,但是因为眼所以现在到眼睛超负荷,以后要合理规划时间。
现在里面的手机号码归属地查询主要通过两种途径:1.网络查询。2.匹配本地归属地数据库。
我认为最好的两个方法的结合,在进行联网查询。能大大添加匹配效果,而且不用过于添加本地数据库容量而增大安装包大小。
步骤:1.开启软件的时候把数据库从assets文件夹复制到files文件夹下,假设已存在,则不用又一次拷贝。
2.实现界面。
3.实现工具类PhoneAddressUtils的getPhoneAddress()方法
4.在界面类activity里调用工具类方法得到地址兵显示出来。
首先是复制数据库的操作:
private void copyDB() {
File file = new File(getFilesDir(), "address.db");
if(file.exists()&&file.length()>0) {
Toast.makeText(this, "已经复制数据库", 0).show();
} else {
try {
AssetManager am = getAssets();
byte[] buffer = new byte[1024];
InputStream is = am.open("address.db");
FileOutputStream fis = new FileOutputStream(file);
int len = 0;
while((len=is.read(buffer))>0) {
fis.write(buffer, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
由于执行中工具类得不到assets文件夹下的文件,所以要在在开机启动的SplashActivity中把数据库复制到files文件夹下。
获得assert文件夹下的文件要用AssetManager对象的open()方法,打开文件返回输入流。
实现界面:就一个简单的输入框,button,显示框即可。
工具类:
package com.itheima.mobilesafe.db.dao; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; public class AddressDao {
private static String path = "data/data/com.itheima.mobilesafe/files/address.db";
public static String getAddress(String number) { String address = number;
if(number.matches("^1[34568]\\d{9}$")) {
String sql = "select location from data2 where id = (select outkey from data1 where id= ?)";
SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
Cursor cursor = database.rawQuery(sql, new String[] {number.substring(0, 7)});
while(cursor.moveToNext()) {
address = cursor.getString(0);
}
cursor.close();
database.close();
} else {
address = "不是手机号码";
} return address;
}
}
调用显示:
点击button时:
public void queryAddress(View view) {
String number = et_phone.getText().toString();
String address = AddressDao.getAddress(number);
et_address.setText(address);
}
可是我们要动态的显示位置,所以要对输入框加一个TextChangedListener。当输入字符串大于3的时候。自己主动调用进行匹配显示出来。
et_phone.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
if(s.length()>3) {
String address = AddressDao.getAddress(s.toString());
et_address.setText(address);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Android属于查询执行情况的电话号码的更多相关文章
- SQL查询作业执行情况
查询作业的执行情况sql: SELECT [JobName] = JOB.name, [Step] = HIST.step_id, [StepName] = HIST.step_name, [Mess ...
- Oracle数据库定时任务配置和日志执行情况查询
基础配置: /***************************************************************** * * 移动抵扣券快到期推送提醒 * 首次执行 : 2 ...
- SQL SERVER 查询Job作业基本信息及执行情况
查询作业基本信息和作业执行情况 SELECT [jop].[job_id] AS '作业唯一标识符' ,[jop].[ name ] AS '作业名称' ,[dp].[ name ] AS '作业创建 ...
- 查询SQL执行情况
/* 查询SQL执行情况 包含逻辑读取信息,执行信息等情况*/ SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total ...
- 【转】 Pro Android学习笔记(九五):AsyncTask(4):执行情况
目录(?)[-] 两个AsyncTask对象的运行情况 多次执行的异常 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/ ...
- 【原创】SQL SERVER 查询Job作业基本信息及执行情况
查询作业基本信息和作业执行情况 SELECT [jop].[job_id] AS '作业唯一标识符' ,[jop].[ name ] AS '作业名称' ,[dp].[ name ] AS '作业创建 ...
- Android(java)学习笔记72:线程的状态转换图以及常见执行情况
1. 线程的状态转换图以及常见执行情况: 2. 线程状态类型: (1)新建状态(New):新创建了一个线程对象.(2)就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start() ...
- Android(java)学习笔记12:线程的状态转换图以及常见执行情况
1. 线程的状态转换图以及常见执行情况: 2. 线程状态类型: (1)新建状态(New):新创建了一个线程对象.(2)就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start() ...
- 查询oracle 数据库 SQL语句执行情况
1.查看总消耗时间最多的前10条SQL语句 select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time ...
随机推荐
- HGE基础教程
作者:寰子 来源:http://www.hgechina.com/前言: 写道: 无意中发现了hge中文社区,听朋友介绍,认识了hge,然后开始对它进行研究,并使用hge开始制作游戏. 因为我所得的资 ...
- 【SSH 基础】浅谈Hibernate关系映射(4)
继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...
- 一个测试SQL2005数据库连接JSP档
在这里,在SQL 2005中间InterLib数据库案例.得到InterLib/tb_booktype目录. 的影响,如下面的: watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- u-boot: Error: Can't overwrite "ethaddr"
When try to execute following command, It reports error as following: --->8--- U-Boot> setenv ...
- cocos2d-x笔记(十一)Lua发展飞机战争-5-
让飞机动
然后在飞机上已被添加到游戏,下一步是让它动起来.主要是为了应对触摸事件. 在C++通过重写ccTouchBegan().ccTouchMoved().ccTouchEnded()三个函数来响应触摸事件 ...
- Eclipse4.4.2手动安装Veloeclipse-2.0.8
引言: 新安装了Eclipse最新版本 4.4.2 Luna(月神),由于项目中使用到了模板引擎Velocity,所以想安装一个Velocity插件, 在网上找了一下,看到Google的vel ...
- cocos2d-x3.0rc 版 设置模拟器窗体大小
由于刚接触这职业时间不是非常长.也是第一次写博客,假设有错误的地方还请大神们指出,开通这博客目的非常easy相互学习和讨论(更重要的是记录工作中学到的东西以方便以后自己查阅) 先后參与过两个项目.只是 ...
- 轮播图片 高效图片轮播,两个imageView实现
该轮播框架的优势: 文件少,代码简洁 不依赖任何其他第三方库,耦合度低 同时支持本地图片及网络图片 可修改分页控件位置,显示或隐藏 自定义分页控件的图片,就是这么个性 自带图片缓存,一次加载,永久使用 ...
- 【原创】leetCodeOj --- Excel Sheet Column Title 解题报告
题目地址: https://oj.leetcode.com/problems/excel-sheet-column-title/ 题目内容: Given a positive integer, ret ...
- 使用Intellij Idea生成可执行文件jar,开关exe文件步骤
确保其Java代码是没有问题的,在IDEA常执行的,然后.按以下步骤: 步骤一:打开File -> Project Structure -> Artifacts,例如以下图 步骤二:点击& ...