使用URL獲取電話號碼的歸屬地

xml文件:html

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

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

    android:layout_width="match_parent"web

    android:layout_height="match_parent"數組

    tools:context=".MainActivity"服務器

    android:orientation="vertical" >網絡


    <TextView多線程

        android:layout_width="wrap_content"app

        android:layout_height="wrap_content"ide

        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();

}


}

相關文章
相關標籤/搜索