您的位置:首页 > 理论基础 > 计算机网络

Android App开发基础篇—HttpURLConnection基础使用

2017-04-17 11:52 543 查看

Android App开发基础篇—HttpURLConnection基础使用

    前言:网络请求功能是许多软件开发中必备的功能之一。在Android开发中,实现网络请求有许多方法,除了可以使用API文档提供的HttpURLconnection类,还有网络上各种各样的开源框架,比如现今比较流行的Volley,OKHttp,Retrofit等。本篇文章起,我们将会一一认识一下当下Android开发中几种比较流行的网络请求方法的基本使用。首先,本篇文章先来认识最基本的HttpURLConenction。

一、基本使用步骤:

    要使用HttpURLConnection进行基本的网络请求,只需遵循以下几个步骤:

    (1)获取URL实例:使用请求网址(或服务器接口地址)获取一个URL实例。 例如:

//创建URL资源
URL url = new URL("http://www.baidu.com");


    (2)建立HTTP连接,获取HttpURLConnection实例:通过URL实例的openConnection()方法建立链接,同时将该方法返回的一个实例强转为HttpURLConnection类型。

//建立HTTP连接,获取HttpURLConnection实例
HttpURLConnection conn = (HttpURLConnection) url.openConnection();


4000

    (3)设置HTTP请求的方式(可选):通过HttpURLConnection实例的setRequestMethod()方法,设置HTTP请求的方式,其中可选方式包括GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE,常用的为GET和POST。默认为GET。例如:

//设置请求方式
conn.setRequestMethod("POST");


    (4)设置连接属性,添加请求参数(可选):使用HttpURLConnection实例的addRequestProperty()方法可以为HTTP连接设置一些连接属性,例如,设置HTTP连接的header信息,或者在HTTP连接中添加服务端所要求的请求参数等。下面列举一些常见属性,在实际应用中按需而定:

//设置维持长连接
conn.addRequestProperty("Connection", "Keep-Alive");
//设置文件字符集格式为UTF-8
conn.addRequestProperty("Charset", "UTF-8");
//设置文件类型为JSON格式
conn.addRequestProperty("Content-Type", "application/json");

//添加服务端接口所需请求参数,例如登录接口所需的用户名
conn.addRequestProperty("username","test");


    (5)设置是否允许输出(可选):如果HTTP请求中需要包含请求参数,如登录接口需要用户名和密码参数,则需要使用HttpURLConnection实例设置setDoOutput(true)(默认为false)。同时,如果将该方法设置为true,即使没有在代码中设置setRequestMethod("POST"),HTTP请求也会自动使用POST方式。

//设置允许输出
conn.setDoOutput(true);


    (6)设置是否需要缓存(可选)



//设置不用缓存
conn.setUseCaches(false);


    (7)获取请求结果:



//请求结果码
int responseCode = conn.getResponseCode();
//responseCode==200表示请求成功
if (responseCode == 200) {
//获取返回的数据
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
String str = baos.toString();
baos.flush();
baos.close();
is.close();
}


      (8)断开连接



conn.disconnect();


二、向服务端提交JSON,返回JSON数据

    这里以一个用户登录接口为例,接口需要2个参数:用户名username和密码password,参数需以JSON格式提交,服务端返回的数据也是JSON格式。

 /*
* 本方法演示通过HttpURLConnection向
* 服务端提交JSON,并从服务端返回JSON数据
* 其中被注释的代码表示可选设置,实际开发中
* 依据需求而设置
*
* */
private void loginRequest() {

try {
//构建JSON实例并向其中添加请求参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "test");
jsonObject.put("password", "test");

//创建URL资源
URL url = new URL(LOGIN);
//建立HTTP连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

//设置允许输出 conn.setDoOutput(true);
//默认即为true,如果设置成false,
//将无法收到服务端返回的数据
// conn.setDoInput(true);
//设置不用缓存
// conn.setUseCaches(false);
//设置请求方式
// conn.setRequestMethod("POST");

//设置维持长连接
// conn.addRequestProperty("Connection", "Keep-Alive");
//设置文件字符集格式
// conn.addRequestProperty("Charset", "UTF-8");
//设置文件类型
// conn.addRequestProperty("Content-Type", "application/json");

//JSON转为字节数组
byte[] bytesData = jsonObject.toString().getBytes();
//设置文件长度
// conn.addRequestProperty("Content-Length", String.valueOf(bytesData.length));
//开始请求
conn.connect();
OutputStream outputStream = conn.getOutputStream();
//写入请求的数据
outputStream.write(bytesData);
outputStream.flush();
outputStream.close();
//请求结果码
int responseCode = conn.getResponseCode();
Log.e("MainActivity", "responseCode:" + responseCode);
if (responseCode == 200) {
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
String str = baos.toString();
Log.e("MainActivity", str);

//对服务端返回的JSON格式的数据进行解析
JSONObject json = new JSONObject(str);
String msg = json.optString("msg");
Log.e("MainActivity", msg);

baos.flush();
baos.close();
is.close();
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: