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