博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用URL获取电话号码的归属地
阅读量:6169 次
发布时间:2019-06-21

本文共 4837 字,大约阅读时间需要 16 分钟。

hot3.png

xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:orientation="vertical" >

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="请输入手机号:" />

    <EditText

        android:id="@+id/editText1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:ems="10" >

        <requestFocus />

    </EditText>

    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="查询"

        android:onClick="toQuery" />

    <TextView

        android:id="@+id/textView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="TextView" />

</LinearLayout>

MainActivity文件:

package cn.wang.mobilecodetest;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

import android.os.Bundle;

import android.os.Handler;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

public class MainActivity extends Activity {

private TextView tv_result = null;// 显示电话号码的归属地

private EditText et_code = null;// 输入电话号码1539370

Handler handler = new Handler();// 新建线程

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv_result = (TextView) findViewById(R.id.textView1);// 归属地的textview

et_code = (EditText) findViewById(R.id.editText1);// 归属地的edittext

}

public void toQuery(View view) {

String code = et_code.getText().toString();// 获取输入的电话号码

getMobileCode1(code);

}

// 使用uml访问网络

private void getMobileCode(final String code) {

new Thread() {// 启动新线程

public void run() {// 重写run()方法

try {

URL url = new URL(

"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="

+ code + "&userID=");

InputStream is = url.openStream();// 字节输入流,OpenStream()打开流以读取当前URL生成提供程序对象的虚拟路径。

BufferedReader br = new BufferedReader(

new InputStreamReader(is, "utf-8"));

// 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

// InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset

// 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

String line = null; //

String result = "";// 结果为空

while ((line = br.readLine()) != null) {

// readline()读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车

// ('\r') 或回车后直接跟着换行。

result += line;

}

br.close();// 关闭输入流br

final String aaa = result;

/*

* 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java

* .lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,

* 但是一个类只能继承一个父类,这是此方法的局限。

*/

handler.post(new Runnable() {/*

* Handler 对象从 Logger

* 中获取日志信息,并将这些信息导出。

* get是从服务器上获取数据 ,post是向服务器传送数据。

*/

@Override

public void run() {

tv_result.setText(aaa);// 设置从URL中读取的字符

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

// 过滤去html标记

private String filterHtml(String source) {// filter是过滤的意思

if (null == source) {

return "";

}

return source.replaceAll("</?[^>]+>", "").trim();

}

// ʹ��HttpURLConnection���� post

private void getMobileCode1(final String code) {

new Thread() {

public void run() {

try {

URL url = new URL(

"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");

/*

* 1.通过在 URL 上调用 openConnection 方法创建连接对象。 2. 处理设置参数和一般请求属性。

* 3.使用 connect 方法建立到远程对象的实际连接。 4.远程对象变为可用。远程对象的头字段和内容变为可访问。

*/

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

conn.setDoInput(true);// 将 doInput 标志设置为 true,指示应用程序要从 URL

// 连接读取数据。

conn.setDoOutput(true);// 将 doOutput 标志设置为 true,指示应用程序要将数据写入

// URL 连接。

// conn.setRequestProperty("Content-Type",

// "application/x-www-form-urlencoded");

String params = "mobileCode=" + code + "&userID=";

byte[] aaa = params.getBytes("utf-8");// String的getBytes()方法是得到一个系统默认的编码格式的字节数组

conn.connect();// 使用 connect 方法建立到远程对象的实际连接。

// conn.setRequestProperty("Content-Length", aaa.length+"");

OutputStream os = conn.getOutputStream();//OutputStream输出流接受输出字节并将这些字节发送到某个接收器,getOutputStream()返回写入到此连接的输出流。

os.write(aaa);

os.close();

InputStream is = conn.getInputStream();

//getInputStream返回从此打开的连接读取的输入流。 在读取返回的输入流时,如果在数据可供读取之前达到读入超时时间,则会抛出 SocketTimeoutException。

BufferedReader br = new BufferedReader(

new InputStreamReader(is, "utf-8"));

String line = null;

String result = "";

while ((line = br.readLine()) != null) {

result += line;

}

br.close();

final String bbb = result;

handler.post(new Runnable() {

@Override

public void run() {

tv_result.setText(filterHtml(bbb));

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

}

转载于:https://my.oschina.net/u/1398982/blog/201928

你可能感兴趣的文章
redis常用命令--zsets
查看>>
springcloud--Feign(WebService客户端)
查看>>
网络攻击
查看>>
sorting, two pointers(cf div.3 1113)
查看>>
Scala并发编程【消息机制】
查看>>
win10下安装Oracle 11g 32位客户端遇到INS-13001环境不满足最低要求
查看>>
AngularJS-01.AngularJS,Module,Controller,scope
查看>>
【MySQL 安装过程1】顺利安装MySQL完整过程
查看>>
Inno Setup入门(二十)——Inno Setup类参考(6)
查看>>
图片自适应
查看>>
amd cmd
查看>>
Linux下的uml画图工具
查看>>
xml返回数组数据
查看>>
约瑟夫问题总结
查看>>
spring mybatis 批量插入返回主键
查看>>
指针函数小用
查看>>
开源力量公开课第二十三期-从SVN到Git,次时代代码管理
查看>>
输入挂
查看>>
升级迁移前,存储过程统计各个用户下表的数据量,和迁移后的比对
查看>>
sql注入分类
查看>>