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