写一个程序用来查询手机号码的归属地(使用的是HttpURLConnection的get提交方式)

需求 : 

写一个程序用来获取手机号码的归属地


思路 :

在网络上有一个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机制,就可以直接进行界面的修改了,

实际上修改界面的操作仍然是运行在主线程中.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用HttpURLConnection转发get请求的Java代码,其中包含了设置请求头和参数的方法: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map; public class HttpUtil { public static String sendGet(String url, Map<String, String> headers, Map<String, String> params) throws Exception { StringBuilder result = new StringBuilder(); String urlNameString = url + "?" + getUrlParams(params); URL realUrl = new URL(urlNameString); HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); for (Map.Entry<String, String> entry : headers.entrySet()) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } connection.connect(); if (connection.getResponseCode() == 200) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result.append(line); } in.close(); } connection.disconnect(); return result.toString(); } private static String getUrlParams(Map<String, String> params) { StringBuilder result = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) { result.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String paramsString = result.toString(); if (paramsString.endsWith("&")) { paramsString = paramsString.substring(0, paramsString.length() - 1); } return paramsString; } } ``` 如果你收到了405错误,这意味着你正在尝试使用不允许的HTTP方法。在这种情况下,你需要检查你的请求方法是否正确。如果你使用的是GET方法,那么你需要检查你的URL是否正确,并且你需要确保你没有在请求中包含任何不必要的参数。如果你使用的是POST方法,那么你需要确保你已经正确地设置了请求头和请求体,并且你需要确保你的请求体中包含了所有必要的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值