需求 :
寫一個程序用來獲取手機號碼的歸屬地
思路 :
在網絡上有一個web服務器,專門用來提供手機號的歸屬地信息
我們要做的就是訪問該服務器,提供手機號,然後獲取服務器發來的響應碼
從響應碼中解析出需要的歸屬地信息。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - -
需求 :
首先自定義個getGSDFromNet方法,用來獲取手機號的歸屬地
步驟 :
1,準備好一個URL,用來將手機號發送給服務器
2,通過URL對象獲得個HttpURLConnection連接
3,設置好連接的請求方式,連接超時時間,讀取超時時間,然後開始連接
4,得到連接後的提示碼
5,如果提示碼爲200,則表示連接成功,開始獲取服務器發回的相應碼
6,將響應碼字符串中的歸屬地信息提取出來
代碼 :
<span style="white-space:pre"> </span> //自定義個方法,用來獲取手機號的歸屬地
protected String getGSDFromNet(String phone) {
try {
//1,準備好一個URL,用來將手機號發送給服務器
URL url = new URL("http://webservice.webxml.com.cn//WebServices/MobileCodeWS.asmx/ge" +
<span style="white-space:pre"> </span>"tMobileCodeInfo?mobileCode="+phone+"&userID=");
//2,通過URL對象獲得個HttpURLConnection連接對象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//3,設置好連接的請求方式,連接超時時間,讀取超時時間,然後開始連接服務器
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
conn.connect();
//4,得到連接後的提示碼
int responseCode = conn.getResponseCode();
if(responseCode == 200)//5,如果提示碼爲200,則表示連接成功,開始獲取服務器發回的相應碼
{
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
StringBuffer sb = new StringBuffer();
String text ;
while((text = br.readLine()) != null)
{
sb.append(text+"/r/n");
}
text = sb.toString();
br.close();
//6,將響應碼字符串中的歸屬地信息提取出來
int start = text.indexOf("\">")+2;
int end = text.indexOf("</");
String gSD = text.substring(start, end);
//將獲得的歸屬地信息返回
return gSD;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - -
需求 :
寫一個程序用來獲取手機號碼的歸屬地
步驟 :
步驟 :
* 1,定義好佈局文件和權限的添加.
* 2,在主線程中獲取需要的控件
* 3,開啓一個子線程,在子線程中執訪問網絡的操作,將請求碼發送過去,獲取服務器發送回來的響應碼,
* 開始解析響應碼,得到需要的信息.
* 4,.調用 Activity 的 runOnUiThread方法,直接在子線程中修改界面
注意 :
//runOnUIThread是Activity的方法,作用是讓run方法中的操作運行在主線程中
runOnUiThread(new Runnable() {
public void run() {
//修改界面
textView.setText(gSD);
}
});
runOnUiThread方法是Activity中的方法,作用是讓run()中的操作運行在主線程中,這樣就無需使用Handler機制,就可以直接進行界面的修改了,
實際上修改界面的操作仍然是運行在主線程中.
代碼 :
public class MainActivity extends Activity {
private EditText editText;
private TextView textView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//2,在主線程中獲取需要的控件
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.textView);
}
//點擊事件
public void onClick(View v)
{
final String phone = editText.getText().toString();
//3,開啓一個子線程,在子線程中執訪問網絡的操作,將請求碼發送過去,獲取服務器發送回來的響應碼,開始解析相應碼,得到需要的信息.
new Thread(new Runnable() {
public void run() {
//調用getgSDFromNet方法,來獲取手機號的歸屬地信息
final String gSD = getGSDFromNet(phone);
//4,調用 Activity 的 runOnUiThread方法,直接在子線程中修改界面
//runOnUIThread是Activity的方法,作用是讓run方法中的操作運行在主線程中
runOnUiThread(new Runnable() {
public void run() {
//修改界面
textView.setText(gSD);
}
});
}
}).start();
}
}
注意 :
runOnUiThread(new Runnable() {
public void run() {
//修改界面
textView.setText(gSD);
}
});
runOnUiThread方法是Activity的方法,作用是讓run()中的操作運行在主線程中,這樣就無需使用Handler機制,就可以直接進行界面的修改了,
實際上修改界面的操作仍然是運行在主線程中.