Android 网络请求(一)HttpURLConnection+OkHttp

Android同时支持TCP和UDP通信,但是大部分的网络调用是建立在TCP之上的HTTP请求完成,Android有两个用于HTTP通信的API,分别是HttpClient和HttpURLConnection。但是推荐使用HttpURLConnection,因为谷歌一直支持他,并且HttpClient在Android 6.0 以上不在支持。

一、HttpURLConnection使用

HttpURLConnection GET方式

1.创建URL对象,打开网络连接 HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

2.设置请求方式为GET conn.setRequestMethod("GET");

3.读取输入流获取响应内容 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

4.定义StringBuilder整合读取结果

<span style="white-space:pre">		</span>    String line= "";
                    StringBuilder result = new StringBuilder();    
                    while ((line = br.readLine())!=null){
                        result.append(line);
                    }
5.关闭输入流关闭网络 连接 conn.disconnect();


HttpURLConnection POST方式

1.创建URL对象,打开网络连接 HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

2.设置请求方式为GET conn.setRequestMethod("POST");

3.发送POST请求设置 conn.setDoInput(true); conn.setDoOutput(true);

注意这两行是一定要写的,缺一不可,这是设置POST必要的条件

4.获取对应HTtpURLConnection输出流

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), Config.CHARSET));

5.上传参数 bw.write(paramsStr.toString());

6.flush输出流缓冲 bw.flush();

7.定义StringBuilder整合读取结果

8.关闭输入输出流及网络


try{
	StringBuffer paramsStr = new StringBuffer();
	HttpURLConnection conn = new URL(url).openConnection();
	conn.setRequestMethod("POST");
	conn.setDoInput(true);
	conn.setDoOutput(true);
	OutputStream out = conn.getOutputStream(); 
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, Config.CHARSET));
	bw.write(paramsStr.toString());//上传参数
	bw.flush();
	InputStream is = conn.getInputStream(); 
	BufferedReader br = new BufferedReader(new InputStreamReader(is));  //定义BufferedReader输入流读取URL响应
	String line= "";
	StringBuilder result = new StringBuilder();     //定义StringBuilder来将读取结果添加成 一个string
	while ((line = br.readLine())!=null){
	    result.append(line);
	}
}catch (Exception e) {
     e.printStackTrace();
}
finally{
	out.close();
	is.close();
	conn.disconnect();
}

二、OkHttp使用

OkHttp是一个高效的HTTP库,允许在一个socket连接上发送多个HTTP请求,共享一个socket,可以通过连接池来减少延时请求,还可以缓存响应数据,使用时要在子线程调用, 通过handler发送结果到主线程,能显著提升网络调用性能

使用之前先添加依赖,在build.gradle中添加依赖 compile 'com.squareup.okhttp3:okhttp:3.4.1'

OkHttp GET方式

OkHttpClient mOkHttpClient = new OkHttpClient();
Request request = new Request.Builder()
              .url(url)
              .build();
mOkHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {

    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        final String result = response.body().string();
        Message message = new Message();
        message.obj = result;
        handler.sendMessage(message);
        System.out.println(message);
    }
});
在onResponse中网络请求成功时的处理方法,这里用了handler来传递消息并通知主线程修改,其中mOkHttpClient.newCall(request).enqueue(new Callback({}));这个是异步处理的,而 mOkHttpClient.newCall(request).excute();这个是同步的,如果在主线程中是不能用excute这个的,但是可以用enqueue()这个。


OkHttp POST方式

public static final MediaType JSON
    = MediaType.parse("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
  RequestBody body = RequestBody.create(JSON, json);
  Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();
  Response response = client.newCall(request).execute();
  return response.body().string();
}
这是官方文档,可以看出比GET方式多添加了RequestBody

大致okHttp基本的GET和POST方法就是这么简单,亲测有效,剩下的上传下载等实验确定正确之后在来更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值