使用URL获取电话号码的归属地

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值