这部分是昨天学习,但是因为眼所以现在到眼睛超负荷,以后要合理规划时间。

现在里面的手机号码归属地查询主要通过两种途径: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属于查询执行情况的电话号码的更多相关文章

  1. SQL查询作业执行情况

    查询作业的执行情况sql: SELECT [JobName] = JOB.name, [Step] = HIST.step_id, [StepName] = HIST.step_name, [Mess ...

  2. Oracle数据库定时任务配置和日志执行情况查询

    基础配置: /***************************************************************** * * 移动抵扣券快到期推送提醒 * 首次执行 : 2 ...

  3. SQL SERVER 查询Job作业基本信息及执行情况

    查询作业基本信息和作业执行情况 SELECT [jop].[job_id] AS '作业唯一标识符' ,[jop].[ name ] AS '作业名称' ,[dp].[ name ] AS '作业创建 ...

  4. 查询SQL执行情况

    /* 查询SQL执行情况 包含逻辑读取信息,执行信息等情况*/ SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total ...

  5. 【转】 Pro Android学习笔记(九五):AsyncTask(4):执行情况

    目录(?)[-] 两个AsyncTask对象的运行情况 多次执行的异常 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/ ...

  6. 【原创】SQL SERVER 查询Job作业基本信息及执行情况

    查询作业基本信息和作业执行情况 SELECT [jop].[job_id] AS '作业唯一标识符' ,[jop].[ name ] AS '作业名称' ,[dp].[ name ] AS '作业创建 ...

  7. Android(java)学习笔记72:线程的状态转换图以及常见执行情况

    1. 线程的状态转换图以及常见执行情况: 2. 线程状态类型: (1)新建状态(New):新创建了一个线程对象.(2)就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start() ...

  8. Android(java)学习笔记12:线程的状态转换图以及常见执行情况

    1. 线程的状态转换图以及常见执行情况: 2. 线程状态类型: (1)新建状态(New):新创建了一个线程对象.(2)就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start() ...

  9. 查询oracle 数据库 SQL语句执行情况

    1.查看总消耗时间最多的前10条SQL语句 select *  from (select v.sql_id,  v.child_number,  v.sql_text,  v.elapsed_time ...

随机推荐

  1. 使用OGG"Loading data from file to Replicat"的方法应该注意的问题:replicat进程是前台进程

    使用OGG的 "Loading data from file to Replicat"的方法应该注意的问题:replicat进程是前台进程 因此.最好是在vncserver中调用该 ...

  2. Hot Days Codeforces Round #132 (Div. 2) D(贪婪)

    Description The official capital and the cultural capital of Berland are connected by a single road ...

  3. Cocos2d-x3.0下一个 Lua与C++打电话给对方

    这里谈下Lua与C++如何实现相互通话 原来的连接:http://blog.csdn.net/qqmcy/article/details/26052771 DJLCData.h 实现类 // // D ...

  4. 安装配置gerrit

    Centos 安装配置gerrit 关闭selinux,不然nginx的反向代理会报错connect() to 127.0.0.1:8080 failed (13: Permission denied ...

  5. 用XAML做网页!!—终结篇

    原文:用XAML做网页!!-终结篇 迄今为止的设计都很顺利,但这次就不得不接触我前面所说的非常糟糕的流文档了,但在此之前先来把标题弄好: <Border BorderBrush="#6 ...

  6. shell加法

    echo 1597+1469+1468+2591+1260+1068+1019+993|bc http://bbs.chinaunix.net/thread-161085-1-1.html http: ...

  7. 上门洗车APP --- Androidclient开发 之 项目结构介绍

    上门洗车APP --- Androidclient开发 之 项目结构介绍 前言 尽管公司项目较紧,但还是抽空给大家继续更新. o_O"~ 欢迎大家的关注,非常高兴和大家共同学习.前面给大家分 ...

  8. JQuery日记_5.13 Sizzle选择器(六)选择器的效率

        当选择表达式不符合高速匹配(id,tag,class)和原生QSA不可用或返回错误时,将调用select(selector, context, results, seed)方法,此方法迭代DO ...

  9. activity点击时各种方法的区别

    用到不同方法时候某些系统有不太一样的情况: public class MainActivity extends Activity { private static String TAG = " ...

  10. SQLServer 网络协议(一)

    SQLserver现在主要的3种协议:Shared Memory.TCP/IP 和 Named Pipe SharedMemory: Shared Memory最快最简单的协议,使用SharedMem ...