标签:
一、知识储备
1、归属地查询步骤
1)获取用户输入电话号码
2)过滤用户的错误输入
--使用正则表达式
3)查询数据库,反馈结果
2、电话号码的特点
电话号码特点:1 + (3、4、5、6、7、8)+(9个数字)
3、正则表达式
^:字符串的开始
$:字符串的结束
[3-8]:3到8中的任意一个
{9}:上一个类型有九个
\d:表示数字
\d+:数字有一个或多个
1)^1[3-8]\d{9}$:
表示是一个字符串、第一个是1、第二个是3到8中的任意一个、字符串最后有九个数字
2)^\d+$
一个有1个或多个数字的字符串
3)举例:
String str="123456789"
Str.matches("^\\d+$")
注意:匹配时"\" 注意转义为"\\"
二、开始我们的手机归属地查询吧
1、准备好数据库
我用的是android studio :数据库assets文件夹中(new -->folder -->assets folder)
注意:1、数据库路径必须是data/data目录下的文件,否则数据库访问不到
2、根据号码前七位查询
3、查询数据库前需要先调用 copyDB();
把数据库放到指定目录下:PATH="data/data/com.example.mobile/files/address.db
getFilesDir()==data/data/com.example.mobile/files
getAssets()==我们创建的assets文件夹路径
private void copyDB(String dbname){
File destFile = new File(getFilesDir(),dbname);
//如果数据库存在,不再第二次拷贝
if (destFile.exists()){
return;
}
FileOutputStream out=null;
try {
InputStream in=getAssets().open(dbname);
out=new FileOutputStream(destFile);
byte b[]=new byte[1024];
int len=0;
while((len=in.read(b))!=-1){
out.write(b,0,len);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2、代码示例
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/TitleStyle"
android:text="归属地查询"/>
<EditText
android:id="@+id/et_phone"
android:inputType="phone"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:onClick="query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"/>
<TextView
android:id="@+id/tv_result"
android:layout_marginLeft="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询结果"
android:textSize="18sp"/>
</LinearLayout>
package com.example.mobile.activity;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import com.example.mobile.R;
public class AddressActivity extends Activity{
private static final String PATH="data/data/com.example.mobile/files/address.db";
private EditText etNumber;
private TextView tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_address);
etNumber= (EditText) findViewById(R.id.et_phone);
tvResult= (TextView) findViewById(R.id.tv_result);
}
/**
*类型:按钮监听器
* 功能:获取手机归属地
*/
public void query(View view){
String number=etNumber.getText().toString();
if (!TextUtils.isEmpty(number)){
String address= getAddress(number);
tvResult.setText(address);
}
}
//查询手机归属地
public static String getAddress(String number){
SQLiteDatabase database=null;
String address="未知号码";
//过滤掉不是电话号码(11位)的查询
if (number.matches("^1[3-8]\\d{9}$")){
//查询手机归属地
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)});
if (cursor.moveToNext()){
address=cursor.getString(0);
}
cursor.close();
}else if (number.matches("^\\d+$")){//匹配特殊电话号码
switch (number.length()){
case 3:
address="报警电话";
break;
case 4:
address="模拟器";
break;
case 5:
address="客服电话";
break;
case 7:
case 8:
address="本地电话";
break;
default:
break;
}
}
if (database != null)
database.close();
return address;
}
}
标签:
原文地址:http://www.cnblogs.com/324sige/p/5741948.html