Android手机号码归属地的查询

时间:2022-12-05 17:44:21

一个简单的demo,从聚合数据申请手机号码归属地数据接口;

在edittext中输入待查询号码,获取号码后在子线程中使用httpurlconnection获取json数据,之后进行解析;

数据获取完成后,在主线程中更新ui,显示获取的号码归属地信息。

布局文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >  
 
   
  <edittext 
    android:id="@+id/et_querylocation"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:textcolor="#000000"
    android:hint="输入号码"/> 
   
  <button 
    android:onclick="query"
    android:textsize="24sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="查询"/>
   
  <textview 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tv_phonelocation"
    android:textsize="20sp"
    android:textcolor="#000000"/>
 
</linearlayout>

java代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.example.phonehome;
 
import java.io.bufferedreader;
import java.io.dataoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.io.inputstreamreader;
import java.io.unsupportedencodingexception;
import java.net.httpurlconnection;
import java.net.url;
import java.net.urlencoder;
import java.util.hashmap;
import java.util.map;
 
import org.json.jsonobject;
 
import android.app.activity;
import android.os.bundle;
import android.os.handler;
import android.text.textutils;
import android.view.view;
import android.widget.edittext;
import android.widget.textview;
import android.widget.toast;
 
public class mainactivity extends activity {
 
  private edittext et_phone;
  private textview tv_phone;
  private final static int start = 0;
  private final static int finish = 1;
  private string phone;//待查询号码
  //号码信息
  private static string province;
  private static string city;
  private static string company;
  private static string card;
   
   public static final string def_chatset = "utf-8";
   public static final int def_conn_timeout = 30000;
   public static final int def_read_timeout = 30000;
    
   public static final string appkey ="申请的app key";
   
   //子线程中查询数据开始、完成时发送消息,完成相应操作
   handler handler = new handler(){
     public void handlemessage(android.os.message msg) {
       switch (msg.what) {
      case start:
        toast.maketext(mainactivity.this, "正在查询,请稍候", toast.length_short).show();
        break;
         
      case finish:
        //在textview中显示查得的号码信息(子线程中不能更新ui)
        tv_phone.settext(province +" "+ city + " " + company + " " + card);
        break;
      default:
        break;
      }
     };
   };
    
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    initview();
  }
   
  //button的店家事件,获取待查询号码后在子线程中进行查询
  public void query(view v){
    phone = et_phone.gettext().tostring().trim();
    if (!textutils.isempty(phone)) {
      new thread(){
        public void run() {
          //开始查询
          handler.obtainmessage(start).sendtotarget();
          getrequest(phone);
          //查得结果
          handler.obtainmessage(finish).sendtotarget();
        };
      }.start();
    }else {
      toast.maketext(mainactivity.this, "输入号码不能为空", toast.length_short).show();
    }
     
     
  }
   
  //手机归属地查询
  public static void getrequest(string phone){
    string result =null;
    string url ="http://apis.juhe.cn/mobile/get";//请求接口地址
    map params = new hashmap();//请求参数
      params.put("phone",phone);//需要查询的手机号码或手机号码前7位
      params.put("key",appkey);//应用appkey(应用详细页查询)
      params.put("dtype","");//返回数据的格式,xml或json,默认json
  
    try {
      //得到json数据,并进行解析
      result =net(url, params, "get");
      jsonobject object = new jsonobject(result);
      jsonobject ob = new jsonobject(object.get("result").tostring()+"");
      province = ob.getstring("province");
      city = ob.getstring("city");
      company = ob.getstring("company");
      card = ob.getstring("card");
    } catch (exception e) {
      e.printstacktrace();
    }
  }
   
  /**
  *
  * @param strurl 请求地址
  * @param params 请求参数
  * @param method 请求方法
  * @return 网络请求字符串
  * @throws exception
  */
  public static string net(string strurl, map params,string method) throws exception {
    httpurlconnection conn = null;
    bufferedreader reader = null;
    string rs = null;
    try {
      stringbuffer sb = new stringbuffer();
      if(method==null || method.equals("get")){
        strurl = strurl+"?"+urlencode(params);
      }
      url url = new url(strurl);
      conn = (httpurlconnection) url.openconnection();
      if(method==null || method.equals("get")){
        conn.setrequestmethod("get");
      }else{
        conn.setrequestmethod("post");
        conn.setdooutput(true);
      }
      //conn.setrequestproperty("user-agent", useragent);
      conn.setusecaches(false);
      conn.setconnecttimeout(def_conn_timeout);
      conn.setreadtimeout(def_read_timeout);
      conn.setinstancefollowredirects(false);
      conn.connect();
      if (params!= null && method.equals("post")) {
        try {
          dataoutputstream out = new dataoutputstream(conn.getoutputstream());
          out.writebytes(urlencode(params));
        } catch (exception e) {
          // todo: handle exception
          e.printstacktrace();
        }
         
      }
      inputstream is = conn.getinputstream();
      reader = new bufferedreader(new inputstreamreader(is, def_chatset));
      string strread = null;
      while ((strread = reader.readline()) != null) {
        sb.append(strread);
      }
      rs = sb.tostring();
    } catch (ioexception e) {
      e.printstacktrace();
    } finally {
      if (reader != null) {
        reader.close();
      }
      if (conn != null) {
        conn.disconnect();
      }
    }
    return rs;
  }
 
  //将map型转为请求参数型
  public static string urlencode(map<string,string> data) {
    stringbuilder sb = new stringbuilder();
    for (map.entry i : data.entryset()) {
      try {
        sb.append(i.getkey()).append("=").append(urlencoder.encode(i.getvalue()+"","utf-8")).append("&");
      } catch (unsupportedencodingexception e) {
        e.printstacktrace();
      }
    }
    return sb.tostring();
  }
 
   
   
 
  private void initview() {
    setcontentview(r.layout.activity_main);
    et_phone = (edittext) findviewbyid(r.id.et_querylocation);
    tv_phone = (textview) findviewbyid(r.id.tv_phonelocation);
  }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助。