博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android属于查询执行情况的电话号码
阅读量:5742 次
发布时间:2019-06-18

本文共 2614 字,大约阅读时间需要 8 分钟。

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

现在里面的手机号码归属地查询主要通过两种途径: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							}		});

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
nodejs 完成mqtt服务端
查看>>
在ASP.NET MVC 中获取当前URL、controller、action
查看>>
Spring IoC容器初的初始化过程
查看>>
sql server 触发器
查看>>
[工具]前端自动化工具grunt+bower+yoman
查看>>
自动化测试之WatiN(2)
查看>>
关于完成生鲜电商项目后的一点总结
查看>>
noip2012 普及组
查看>>
第二阶段 铁大Facebook——十天冲刺(10)
查看>>
Java判断是否为垃圾_Java GC如何判断对象是否为垃圾
查看>>
多项式前k项和java_多项式朴素贝叶斯softmax改变
查看>>
java数组只能交换0下标和n_编程练习-只用0交换排序数组
查看>>
java的maxrow_聊聊pg jdbc statement的maxRows参数
查看>>
centos7安装mysql视频教程_centos7安装mysql(完整)
查看>>
php图片赋值,php如何优雅地赋值
查看>>
dz.27z.co index.php,dz7.2 伪静态规则
查看>>
如何解决OutOfMemoryError
查看>>
【探索HTML5第二弹01】HTML5的前世今生以及来世
查看>>
Failed to connect to remote VM. Connection refused. Connection refused: connect
查看>>
freeze
查看>>