码迷,mamicode.com
首页 > 移动开发 > 详细

手机归属地查询

时间:2016-08-05 17:39:02      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

一、知识储备

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!