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) 免费用户为空字符串;返回数据:字符串(手机号码:省份 城市 手机卡类型)。
测试结果:如下