标签:
一、知识储备
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