网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 Android中手机号码归属地查询实现
内容
    这部分是昨天学习的,但是因为眼睛超负荷所以拖到现在,以后要合理规划时间。
    目前手机里面的号码归属地查询主要是通过两种方式: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()方法,打开文件返回输入流。
    实现界面:就一个简单的输入框,按钮,显示框就行。
    工具类:
    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;
    }
    }
    调用显示:
    点击按钮时:
    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
    }
    });
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/14 21:56:16