手机归属地查询_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 手机归属地查询

手机归属地查询

 2017/8/30 10:08:48  钻石VIP  程序员俱乐部  我要评论(0)
  • 摘要:手机归属地查询效果图:分析:1、传递多个参数,用一个类就好2、打开数据库privateSQLiteDatabasedatabase;database=SQLiteDatabase.openOrCreateDatabase(file,null);file是数据库的路径3、在逻辑中多加判断比如是否获取到正确的手机号比如我们操作的字符串是否为空比如时候获取正确参数4、通过文件流来实现释放APK中包中的数据库文件到手机本地5
  • 标签:手机

手机归属地查询

效果图:

 

分析:

1、传递多个参数,用一个类就好

2、打开数据库

  private SQLiteDatabase database;

  database=SQLiteDatabase.openOrCreateDatabase(file, null);

    file是数据库的路径

3、在逻辑中多加判断

  比如是否获取到正确的手机号

  比如我们操作的字符串是否为空

  比如时候获取正确参数

4、通过文件流来实现释放APK中包中的数据库文件到手机本地

5、需要用的数据库放在assets目录中

  bufferIn = new BufferedInputStream(getAssets().open("naddress.db"));

6、确保输出流flush,如果不flush,数据会变少,有一部分没有成功写出到本地

  bufferOut.flush();

7、try-catch的时候记得finally,去关闭输入流和输出流

8、-1为文件末

  while ((len = bufferIn.read(buffer)) != -1)

9、File file = getDatabasePath("naddress.db");

  这个方法得到这样的路径data/data/包/database/naddress.db

10、如果文件没有成功创建,我们取创建文件夹

  if (!file.exists())

    file.getParentFile().mkdirs();

11、正则表达式匹配手机号

  Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");  

  Matcher m = p.matcher(phoneNumber);  

  if (!m.matches()) 

12、百度的正确姿势

  java 正则表达式验证手机号

13、找错误的时候多去看cause by

 

代码:

/查询手机号归属地2/res/layout/activity01.xml

class="code_img_closed" src="/Upload/Images/2017083010/0015B68B3C38AA5B.gif" alt="">
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <LinearLayout
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:orientation="horizontal" >
11 
12         <TextView
13             android:layout_width="wrap_content"
14             android:layout_height="wrap_content"
15             android:text="请输入手机号码:" />
16 
17         <EditText
18             android:id="@+id/et_mobileNum"
19             android:layout_width="205dip"
20             android:layout_height="wrap_content" />
21     </LinearLayout>
22 
23     <TextView
24         android:id="@+id/tv_city_cardType"
25         android:layout_width="wrap_content"
26         android:layout_height="wrap_content"
27         android:textColor="#ff0000"
28         android:textSize="25sp"
29         android:text="归属地:" />
30 
31     <Button 
32         android:id="@+id/btn_search"
33         android:layout_width="wrap_content"
34         android:layout_height="wrap_content"
35         android:layout_gravity="center_horizontal"
36         android:onClick="query"
37         android:text="查询号码归属地" />
38 
39 </LinearLayout>
logs_code_collapse">界面设计

database.AddressDao

 1 package database;
 2 
 3 import java.io.File;
 4 
 5 import bean.InfoBean;
 6 import android.database.Cursor;
 7 import android.database.sqlite.SQLiteDatabase;
 8 
 9 /*
10  * 操作数据库
11  */
12 public class AddressDao {
13     private SQLiteDatabase database;
14     public AddressDao(File file){
15         database=SQLiteDatabase.openOrCreateDatabase(file, null);
16     }
17     /**
18      * 获取城市及卡类型
19      * @param mobilePrefix 手机号码前缀
20      */
21     public InfoBean getCityOrCardType(String mobilePrefix){
22         String sql="select city,cardtype from address_tb where _id in(select outkey from numinfo where mobileprefix=?);";
23         Cursor cursor=database.rawQuery(sql, new String[]{mobilePrefix});
24         //就一条记录,不用用while,就if就好了
25         if(cursor.moveToNext()){
26             String city=cursor.getString(cursor.getColumnIndex("city"));
27             String cardtype=cursor.getString(cursor.getColumnIndex("cardtype"));
28             return new InfoBean(city, cardtype);
29         }
30         return null;
31     }
32 }
数据库操作

bean.InfoBean

 1 package bean;
 2 
 3 public class InfoBean {
 4     private String city;
 5     private String cardType;
 6     
 7     
 8     public InfoBean(String city, String cardType) {
 9         super();
10         this.city = city;
11         this.cardType = cardType;
12     }
13     public String getCity() {
14         return city;
15     }
16     public void setCity(String city) {
17         this.city = city;
18     }
19     public String getCardType() {
20         return cardType;
21     }
22     public void setCardType(String cardType) {
23         this.cardType = cardType;
24     }
25     
26     
27 }
传递数据的类(城市及归属地)

fry.Activity01

  1 package fry;
  2 
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.File;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.util.regex.Matcher;
  9 import java.util.regex.Pattern;
 10 
 11 import bean.InfoBean;
 12 
 13 import com.example.searchMobileCity.R;
 14 
 15 import database.AddressDao;
 16 import android.app.Activity;
 17 import android.os.Bundle;
 18 import android.view.View;
 19 import android.view.View.OnClickListener;
 20 import android.widget.Button;
 21 import android.widget.EditText;
 22 import android.widget.TextView;
 23 import android.widget.Toast;
 24 
 25 public class Activity01 extends Activity {
 26     private Button btn_search;
 27     private EditText et_mobileNum;
 28     private TextView tv_city_cardType;
 29     private AddressDao dao;
 30 
 31     @Override
 32     protected void onCreate(Bundle savedInstanceState) {
 33         // TODO Auto-generated method stub
 34         super.onCreate(savedInstanceState);
 35         setContentView(R.layout.activity01);
 36         initView();
 37         // file就是数据库文件路径
 38         File file = initDatabaseData();
 39         dao = new AddressDao(file);
 40 
 41     }
 42 
 43     private void initView() {
 44         tv_city_cardType = (TextView) findViewById(R.id.tv_city_cardType);
 45         et_mobileNum = (EditText) findViewById(R.id.et_mobileNum);
 46         btn_search = (Button) findViewById(R.id.btn_search);
 47     }
 48 
 49     /*
 50      * 查询归属地
 51      */
 52     public void query(View view) {
 53         tv_city_cardType.setText("归属地:");
 54         String phoneNumber = et_mobileNum.getText().toString();
 55         Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");  
 56         Matcher m = p.matcher(phoneNumber);  
 57         if (!m.matches()) {
 58             Toast.makeText(this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
 59             return ;
 60         } else {
 61             String mobilePrefix = phoneNumber.substring(0, 7);
 62             InfoBean bean = dao.getCityOrCardType(mobilePrefix);
 63             if (bean == null) {
 64                 tv_city_cardType.setText("没查询到该号码的城市与归属地!!");
 65             } else {
 66                 tv_city_cardType.setText("城市:" + bean.getCity() + "   \n卡类型: "
 67                         + bean.getCardType());
 68             }
 69         }
 70     }
 71 
 72     /*
 73      * 释放APK中包中的数据库文件到手机本地 读和写
 74      */
 75     private File initDatabaseData() {
 76         // 这个方法得到这样的路径data/data/包/database/naddress.db
 77         File file = getDatabasePath("naddress.db");
 78         if (!file.exists()) {
 79             file.getParentFile().mkdirs();
 80         } else {
 81             return file;
 82         }
 83 
 84         // 获取读入流
 85         BufferedInputStream bufferIn = null;
 86         // 输出流
 87         BufferedOutputStream bufferOut = null;
 88         try {
 89             bufferIn = new BufferedInputStream(getAssets().open("naddress.db"));
 90             bufferOut = new BufferedOutputStream(new FileOutputStream(file));
 91             // 开始释放缓存流
 92             // 读的时候,弄个缓存区,让释放快一点
 93             byte[] buffer = new byte[8000];
 94             int len = 0;
 95             // -1为文件末
 96             while ((len = bufferIn.read(buffer)) != -1) {
 97                 bufferOut.write(buffer, 0, len);
 98                 // 不flush的话文件大小会变小的
 99                 bufferOut.flush();
100             }
101             return file;
102         } catch (IOException e) {
103             // TODO Auto-generated catch block
104             e.printStackTrace();
105         } finally {
106             try {
107                 if (bufferIn != null)
108                     bufferIn.close();
109                 if (bufferOut != null)
110                     bufferOut.close();
111             } catch (IOException e) {
112                 e.printStackTrace();
113             }
114         }
115         return null;
116     }
117 }
主activity

 

发表评论
用户名: 匿名