一起Talk Android吧(第三百三十四回: Android中的HTTP请求一)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百三十四回: Android中的HTTP请求一)相关的知识,希望对你有一定的参考价值。
各位看官们,大家好,上一回中咱们说的是android中HTTP接口的例子,这一回中咱们说的例子是Android中的HTTP请求。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,上一章回中我们介绍了Android中HTTP的三种接口,其中第一种接口(Apach接口)已经从SDK中删除,因此我们不再介绍了,我们在本章回中将介绍第二种接口:Java中的接口。
GET请求步骤
我们将重点介绍如何通过此接口从网络上获取数据。获取数据的方式有两种:GET和POST
,这两种方式对应于我们在HTPP协议中介绍的GET和POST请求。本章回中先介绍如何使用GET请求从网站区获取数据,下面是具体的操作步骤:
- 1.使用URL创建一个URL对象,这里的URL通俗点讲就是我们上网时使用的网址;
- 2.使用URL对象的openConnection()方法获取HttpURLConnection对象;
- 3.使用HttpURLConnection对象的setRequestMethod()方法设定请求类型为GET;
- 4.使用HttpURLConnection对象的相关方法设定超时等参数;
- 5.使用HttpURLConnection对象的getInputStream()方法获取输入流;
- 6.在输入流中读取网站返回的数据,这些数据就是我们向URL所指网站发出GET请求后,网站响应的数据;
- 7.关闭输入流并且使用HttpURLConnection对象的disconnect()方法断开网络连接;
看官们,除了需要掌握这些步骤外,还有以下注意事项:
- 1.与HttpURLConnection相关的操作需要处理异常;
- 2.获取输入流需要在子线程中进行,Android不允许在主线程中做此操作;
- 3.网络操作容易发生错误,需要使用HttpURLConnection对象的getResponseCode()获取响应码,响应码为200时表示获取数据成功;
- 4.获取数据时打开的各种流都需要关闭,最后还需要断开网络连接,否则会引起内存泄漏;
GET请求示例代码
下面是程序的主要代码,请大家参考:
private static final String HTTP_URL = "https://www.baidu.com/";
private void initHttp()
//注意:new URL和openConnection都需要处理异常,为了方便把它们统一放到一个try/catch中
try
mURL = new URL(HTTP_URL);
mHttpURLConnection = (HttpURLConnection)mURL.openConnection();
if(mHttpURLConnection != null)
mHttpURLConnection.setRequestMethod("GET");
mHttpURLConnection.setConnectTimeout(5*1000);
mHttpURLConnection.setReadTimeout(3*1000);
catch (Exception e)
Log.d(TAG, "initHttp: Exception:"+e.toString());
private void httpGetRequest()
if(mHttpURLConnection == null)
return;
try
if(200 == mHttpURLConnection.getResponseCode())
mInputStream = mHttpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(mInputStream));
StringBuilder stringBuilder = new StringBuilder();
String tempStr = bufferedReader.readLine();
while (tempStr != null)
stringBuilder.append(tempStr);
tempStr = bufferedReader.readLine();
bufferedReader.close();
bufferedReader = null;
mStrData = stringBuilder.toString();
Log.d(TAG, "httpGetRequest: read Data = "+mStrData);
catch (Exception e)
Log.d(TAG, "httpGetRequest: get Data Exception: "+e.toString());
//创建一个button,并且在点击button时启动线程来获取数据
private Button btGet = (Button) findViewById(R.id.id_http_bt_get);
btGet.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
//注意:android中不能在主线程中获取数据
new Thread(new Runnable()
@Override
public void run()
httpGetRequest();
).start();
);
//关闭流并且断开网络连接
private void releaseConnection()
if(mInputStream != null)
try
mInputStream.close();
mInputStream = null;
catch (Exception e)
Log.d(TAG, "releaseConnection: close inputStream "+e.toString());
if(mHttpURLConnection != null)
mHttpURLConnection.disconnect();
mHttpURLConnection = null;
上面的程序中我们向百度网站发起HTTP的GET请求,然后从百度网站的返回结果中获取数据,我们没有对数据进行处理,而是将所有数据全部打印出来。上面的程序只有主要功能的代码,其它代码省略了,此外,页面布局中只有一个Button,与布局相关的代码大家可以自已补充,我们在这里就不列出了。建议大家自己动手运行程序,通过程序的运行结果查看网站对HTTP请求的响应。
看官们,关于Android中HTTP请求的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百三十四回: Android中的HTTP请求一)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第三百三十六回: Android中的volley一)
一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)
一起Talk Android吧(第三百三十九回: Android中的OkHttp二)
一起Talk Android吧(第三百四十四回: JSON概述)