野人学Android基础篇之网络通讯第一课--HttpUrlConnection的使用

写在开头

既然选择远方,那就风雨兼程~

因为工作的原因,这半个月断断续续学着Android,因为一些技术问题,迟迟没有写博文总结。直到昨天,我才解决了网络通讯的一个难点,现在才提笔开始网络通讯的第一课。对于此课程,我的计划是两节课:第一课,HttpUrlConnection的使用;第二课,本地Apache服务器与Android之间的连接。

-------------------------------------------------------分割线--------------------------------------------------------------------------------------

在讲HttpUrlConnection的具体使用之前,要重点强调两个知识点:

1.永远不要在主线程上执行网络调用。最初的时候,我在主线程中复制网络通讯的代码,发现怎么都会引起系统崩溃,然而视频教程中也没有提及,直到在图书馆中找到一本书,上面就着重指出,从Android3.0版(蜂巢)开始,主线程是受系统保护的,试图在主线程中进行网络调用会导致应用程序崩溃。

2.在Android5.1,AndroidHttpClient类已经被遗弃。我最初接触的是HttpUrlConnection类,所以也没有怎么研究HttpClient类,但是在我学习HttpClient的时候,发现已经被Android抛弃了,至于原因,大家可以自行百度。

注:基于第一个知识点,HttpUrlConnection的例子是用AsyncTack异步方法(该方法的具体使用见我之前的博文),当然你也可以用Thread类。

下面欢迎我们的主角登场~

<span style="font-size:18px;"><span style="white-space:pre">	</span>@Override
	protected String doInBackground(String... params) {
		// TODO Auto-generated method stub
		URL url=null;
		StringBuffer sb=null;
		try {
			url = new URL(params[0]);//初始化URL,记住params要加[0]
			HttpURLConnection conn;
			try {
				conn = (HttpURLConnection) url.openConnection();//利用url打开网络连接
				conn.setRequestMethod("GET");//设置数据传输方式,有GET和POST两种方式
				conn.setConnectTimeout(5000);//设置连接时间,如果超过规定的时间还是没有连接成功就会报错
				InputStream is = conn.getInputStream();//如果前面的连接成功的话,会从服务器中获取输入流
				//下面是将输入流读取出来的方式
				sb =  new StringBuffer();
				
				BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
				String str;
				while((str=reader.readLine())!=null){
					sb.append(str);
				}
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sb.toString();
	}</span>
注:网络通讯的设置信息还有其他,有兴趣的可以百度。我没有将AsyncTask的代码全部写出来,是想让大家有个循序渐进的过程,打好基础,千万不能浮躁。我已经将HttpUrlConnection类的使用细节已经在代码注释中写清楚了,请大家认真体会。

在写好HttpAsync类之后,就在MainActivity类的onCreate()中调用就可以了。代码如下:

<span style="font-size:18px;">private String url = "http://www.baidu.com";
HttpAsync ha = new HttpAsync();
ha.execute(url);</span>

写到这里,想必你已经将程序运行在模拟器上了,但是你会发现程序会报错,然后崩溃。如果你的好奇心足够强大,可以查找报错的原因。对!就是还没有在AndroidManifest.xml中配置INTERNET的权限。现在可以去运行程序了,祝你好运!

写于2015年9月25日晚


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值