网络请求框架 Okhttp

OkHttp

简介:
    OkHttp是一个高效的HTTP客户端
    使用builders构造器模式,支持阻塞式的同步请求和带回调的异步请求。
    
特性:
    1. 允许所有同一个主机地址的请求共享同一个socket连接
    2. 连接池减少请求延时
    3. 透明的GZIP压缩减少响应数据的大小
    4. 缓存响应内容,避免一些完全重复的请求

引入项目:
    implementation("com.squareup.okhttp3:okhttp:3.14.0")

官网地址:
    https://github.com/square/okhttp
    
基本权限:
    1. 联网权限
        <uses-permission android:name="android.permission.INTERNET"/>
    2. 写入缓存权限
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

发送请求:
    步骤:
        1. 构建OkHttpClient客户端
        2. 构建Request请求对象
        3. 构建Call访问对象
        4. 发送请求获取返回数据 

        1. 同步Get请求
		OkHttpClient okHttpClient = new OkHttpClient();
		
		Request request = new Request.builder()
			.url("https://www.baidu.com") // 请求地址
			.get() // 请求方式,默认为get请求,可以不写
			.build();
			
		Call call = okHttpClient.newCall(request);
		
		new Thread(new Runnable () {
			@Override
			public void run () {
				try {
					Response response = call.execute();
					Log.d(TAG, "run: " + response.body().string());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}).start();
		
		注意:
			同步网络请求会阻塞线程,需要放置在子线程中执行

 

        2. 异步Get请求
		OkHttpClient okHttpClient = new OkHttpClient();
		
		Request request = new Request.builder()
			.url("https://www.baidu.com") // 请求地址
			.get() // 请求方式,默认为get请求,可以不写
			.build();
			
		Call call = okHttpClient.newCall(request);
		
		call.enqueue(new Callback(){
			@Override
			public void onFailure(Call call, IOException e) {
				Log.d(TAG, "onFailure: ");
			}

			@Override
			public void onResponse(Call call, Response response) throws IOException {
				Log.d(TAG, "onResponse: " + response.body().string());
			}
		});
        3. Post请求--提交String
		MediaType mediaType = MediaType.parse("text/x-markdown; charset=utf-8");
		
		String requestBody = "CSDN";
		
		Request request = new Request.Builder()
			.url("https://api.github.com/markdown/raw")
			.post(RequestBody.create(mediaType, requestBody))
			.build();
			
		OkHttpClient okHttpClient = new OkHttpClient();
		
		okHttpClient.newCall(request).enqueue(new Callback () {
			@Override
			public void onFailure(Call call, IOException e) {
				Log.d(TAG, "onFailure: " + e.getMessage());
			}

			@Override
			public void onResponse(Call call, Response response) throws IOException {
				Log.d(TAG, response.protocol() + " : " +response.code() +
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值