OKHttp入门详解

4、OKHttp详解

https://www.jianshu.com/p/9aa969dd1b4d

在AndroidManifest.xml中加入联网权限

<uses-permission android:name="android.permission.INTERNET" />

1、拿到OkHttpClient对象

OkHttpClient okHttpClient = new OkHttpClient() 

2、构造Request对象

Request request = new Request.Builder()
                .get()
                .url("https:www.baidu.com")
                .build();

这里我们采用建造者模式和链式调用指明是进行Get请求,并传入Get请求的地址

如果我们需要在get请求时传递参数,我们可以以下面的方式将参数拼接在url之后

https:www.baidu.com?username=admin&password=admin

3、将Request封装为Call

Call call = client.newCall(request);

4、根据需要调用同步或者异步请求方法

//同步调用,返回Response,会抛出IO异常
Response response = call.execute();

//异步调用,并设置回调函数
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Toast.makeText(OkHttpActivity.this, "get failed", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onResponse(Call call, final Response response) throws IOException {
        final String res = response.body().string();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                contentTv.setText(res);
            }
        });
    }
});
  • 同步调用会阻塞主线程,一般不适用
  • 异步调用的回调函数是在子线程,我们不能在子线程更新UI,需要借助于runOnUiThread()方法或者Handler来处理

注意:::对okHttp连接超时进行处理

            public void onFailure(Call call, IOException e) {
                Log.e(TAG, mPlayInfo.getPdfilename() + "下载进度:连接失败-" + e.getMessage());
                // 失败终端线程
                if(e instanceof SocketTimeoutException && serversLoadTimes<BaseConstant.maxLoadTimes){如果超时并未超过指定次数,则重新连接
                    Log.e(TAG, mPlayInfo.getPdfilename() + "下载进度:超时" + e.getMessage()+"尝试第 "+serversLoadTimes+" 次");
                    serversLoadTimes++;
                    okHttpClient.newCall(call.request()).enqueue(this);
                }else {
                    Log.e(TAG, mPlayInfo.getPdfilename() + "下载出错" + e.toString());
                    interrupt();
                }
            }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OkHttp是一个开源的HTTP客户端库,用于在Android和Java应用程序中进行网络请求。它提供了简单且强大的API,使得发送和接收HTTP请求变得更加容易。在使用OkHttp时,首先需要创建一个OkHttpClient实例,该实例用于配置和执行HTTP请求。然后,可以使用OkHttpClient创建一个Request对象,该对象包含了请求的URL、请求头和请求体等信息。接下来,可以使用OkHttpClient的newCall方法创建一个Call对象,该对象表示一个异步的HTTP请求任务。可以通过调用Call对象的enqueue方法来执行异步请求,并传入一个Callback对象来处理请求的响应结果。在Callback对象的onResponse方法中,可以获取到请求的响应数据,而在onFailure方法中,可以处理请求失败的情况。[1] OkHttp和Retrofit是相辅相成的,Retrofit是对OkHttp的上层封装,它提供了更加简洁和高级的API来进行网络请求。在使用OkHttp时,可以通过创建一个OkHttpClient实例来配置网络请求的一些参数,例如连接超时时间、读取超时时间等。然后,可以使用OkHttpClient创建一个Request对象,该对象包含了请求的URL、请求头和请求体等信息。接下来,可以使用OkHttpClient的newCall方法创建一个Call对象,该对象表示一个异步的HTTP请求任务。可以通过调用Call对象的enqueue方法来执行异步请求,并传入一个Callback对象来处理请求的响应结果。[2] 在OkHttp中,execute方法表示同步请求,即在当前线程中执行网络请求,而enqueue方法表示异步请求,即使用OkHttp内置的线程池来执行网络请求。这涉及到OkHttp的任务分发器,它负责将请求任务分发给线程池中的线程来执行。通过使用异步请求,可以避免在主线程中进行网络请求,从而提高应用的响应速度和用户体验。[3]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值