欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android使用http请求手机号码归属地查询代码分享

程序员文章站 2024-03-02 12:52:16
归属地数据源 http://webservice.webxml.com.cn/webservices/mobilecodews.asmx webxml网站还支持...

归属地数据源

http://webservice.webxml.com.cn/webservices/mobilecodews.asmx

webxml网站还支持其他请求方式 如soap等等

界面比较简单

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingtop="5dip"
android:paddingleft="5dip"
android:paddingright="5dip"
>
<textview
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="手机号码:"
/>
<edittext android:id="@+id/phone_sec"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputtype="textphonetic"
android:singleline="true"
android:hint="至少输入前七位"
/>
<button android:id="@+id/query_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="查询"
/>
<textview android:id="@+id/result_text"
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center_horizontal|center_vertical"
/>
</linearlayout> 

下面是mainactivity.java

package com.sphere.guishudi;
import java.util.arraylist;
import java.util.list;
import org.apache.http.httpresponse;
import org.apache.http.httpstatus;
import org.apache.http.namevaluepair;
import org.apache.http.client.httpclient;
import org.apache.http.client.entity.urlencodedformentity;
import org.apache.http.client.methods.httppost;
import org.apache.http.impl.client.defaulthttpclient;
import org.apache.http.message.basicnamevaluepair;
import org.apache.http.protocol.http;
import org.apache.http.util.entityutils;
import android.app.activity;
import android.app.progressdialog;
import android.os.bundle;
import android.os.handler;
import android.os.message;
import android.view.menu;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.edittext;
import android.widget.textview;
/**
* 手机号码归属地查询 
*/
public class mainactivity extends activity {
private edittext phonesecedittext; 
private textview resultview; 
private button querybutton;
private progressdialog prodialog;
private thread thread;
//定义消息
private static final int number_format_error = 0;
private static final int query_success_msg = 1;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
phonesecedittext = (edittext) findviewbyid(r.id.phone_sec); 
resultview = (textview) findviewbyid(r.id.result_text); 
querybutton = (button) findviewbyid(r.id.query_btn);
prodialog = new progressdialog(mainactivity.this);
//prodialog.settitle("查询归属地");
prodialog.setmessage("正在查询,请您耐心等待...");
querybutton.setonclicklistener(new queryonclicklistener());
}
handler handler = new handler(){
@override
public void handlemessage(message msg) {
super.handlemessage(msg);
switch (msg.what) {
case number_format_error:
phonesecedittext.settext("");
resultview.settext("您输入的号码格式有误");
break;
case query_success_msg:
resultview.settext(msg.obj.tostring());
prodialog.dismiss();
break;
default:
break;
}
}
};
string phonesec;
class queryonclicklistener implements onclicklistener{
@override
public void onclick(view arg0) {
//得到手机号
phonesec = phonesecedittext.gettext().tostring().trim();
if("".equals(phonesec)||phonesec.length()<7){
//发送消息 显示查询结果的textview清空 
handler.sendemptymessage(number_format_error);
//锁定焦点
phonesecedittext.requestfocus();
return;
}
// 查询手机号码(段)信息 
//getremoteinfo(phonesec);
thread = new thread(new querythread());
thread.start();
prodialog.onstart();
prodialog.show();
}
}
class querythread implements runnable{
@override
public void run() {
getremoteinfo(phonesec);
}
}
/** 
* 手机号段归属地查询 
* @param phonesec 手机号段 
*/ 
private void getremoteinfo(string phonesec) {
// todo auto-generated method stub
// 定义待请求的url
string requesturl = "http://webservice.webxml.com.cn/webservices/mobilecodews.asmx/getmobilecodeinfo";
// 创建httpclient实例
httpclient client = new defaulthttpclient();
// 根据url创建httppost实例
httppost post = new httppost(requesturl);
list<namevaluepair> params = new arraylist<namevaluepair>();
// 设置需要传递的参数
params.add(new basicnamevaluepair("mobilecode", phonesec));
params.add(new basicnamevaluepair("userid", ""));
try {
// 设置url编码
post.setentity(new urlencodedformentity(params, http.utf_8));
// 发送请求并获取反馈
httpresponse response = client.execute(post);
// 判断请求是否成功处理
if (response.getstatusline().getstatuscode() == httpstatus.sc_ok) {
// 解析返回的内容
string result = entityutils.tostring(response.getentity());
// 将查询结果经过解析后显示在textview中
//resultview.settext(filterhtml(result));
message msg = new message();
msg.what = query_success_msg;
msg.obj = filterhtml(result);
handler.sendmessage(msg);
}
} catch (exception e) {
e.printstacktrace();
}
}
/** 
* 使用正则表达式过滤html标记 
* 
* @param source 待过滤内容 
* @return 
*/ 
private string filterhtml(string source) { 
if(null == source){ 
return ""; 
} 
return source.replaceall("</?[^>]+>","").trim(); 
} 
@override
public boolean oncreateoptionsmenu(menu menu) {
getmenuinflater().inflate(r.menu.main, menu);
return true;
}
} 

记得在androidmanifest.xml中配置<uses-permission android:name="android.permission.internet" />

给予程序访问网络的权限。

使用子线程访问网络查询数据,handler做消息处理。

上面所讲解的只是httpclient最基本的功能(发起post请求);我们在浏览器客户端所执行的大多数操作httpclient都能够模拟,例如:提交表单、查询数据、上传下载文档、页面跳转、session存储等。

getmobilecodeinfo

获得国内手机号码归属地省份、地区和手机卡类型信息

输入参数:mobilecode = 字符串(手机号码,最少前7位数字),userid = 字符串(商业用户id) 免费用户为空字符串;返回数据:字符串(手机号码:省份 城市 手机卡类型)。

测试结果:如下

Android使用http请求手机号码归属地查询代码分享

Android使用http请求手机号码归属地查询代码分享