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 ...
随机推荐
- 【Android UI】案例03滑动切换效果的实现(ViewPager)
本例使用ViewPager实现滑动切换的效果.本例涉及的ViewPager.为android.support.v4.view.ViewPager.所以须要在android项目中导入android-su ...
- iOS UITableView的Section Footer加入button
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 在处理UI ...
- 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】
计算视图大小的过程(Measure) 视图大小,准确的来说应该是指视图的布局大小:我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置 ...
- 关于使用X-UA-Compatible来设置IE浏览器兼容模式
原文地址:http://www.cnblogs.com/nidilzhang/archive/2010/01/09/1642887.html 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外 ...
- 《深入浅出 Java Concurrency》—锁紧机构(一)Lock与ReentrantLock
转会:http://www.blogjava.net/xylz/archive/2010/07/05/325274.html 前面的章节主要谈谈原子操作,至于与原子操作一些相关的问题或者说陷阱就放到最 ...
- 【足迹C++primer】52、,转换和继承虚函数
转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding h ...
- windows phone (20) Image元素
原文:windows phone (20) Image元素 之前有说道wp目前支持的图片格式为png和jpeg ,我们可以通过设置Source属性设置图片源,下面要说的是Iamge元素的部分属性,这就 ...
- 王立平--Program Files (x86)
window7根据系统.program files(x86) 它是应用程序目录,在64下位系统.为了更好的相容性32位程序,在一些安装32位程序(请注意,有些节目自己是32位),将默认被安装progr ...
- ASM时的OFM特性对影的建数据文件名称的影响及为SYSTEM表空间的数据文件使用别名
客户遇到个DG的问题,存储使用的ASM管理,有多个磁盘盘. 在主库创建数据文件,备库自己主动创建的数据文件都在同一磁盘组,而且在主库创建数据文件是指定的是类似**.DBF的名字,到备库也变成了使用AS ...
- C++第11周(春)项目1 - 存储班长信息的学生类
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1 - 存储班长信息的学生类] clas ...