高效网络请求攻略:掌握OkHttp3的简易运用技巧

更新:11-08 民间故事 我要投稿 纠错 投诉

各位老铁们好,相信很多人对高效网络请求攻略:掌握OkHttp3的简易运用技巧都不是特别的了解,因此呢,今天就来为大家分享下关于高效网络请求攻略:掌握OkHttp3的简易运用技巧以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

如果要使用OkHttp,需要导入OkHttp的第三方依赖:

实现"com.squareup.okhttp3:okhttp:3.10.0"

注意:如果您的Android Studio低于3.0,则需要将“实现”更改为“编译”。

导入依赖之后,我们就可以开始使用OkHttp了。

1)我们需要创建OKHttpClient对象,OkHttpClient对象有2种方式创建:

1: 通过new关键字直接创建

OkHttpClient okHttpClient=new OkHttpClient();

2: 通过builder模式创建OkHttpClient的内部类Builder对象获取OKHttpClient

OkHttpClient okHttpClient=new OkHttpClient.Builder().build();

我们经常使用第二种方法来创建OkHttpClient对象。拦截器对象可以添加到OkHttpClient对象中,并且在构建器模式中创建OkHttpClient对象的代码看起来非常整洁。

添加拦截器对象:

添加应用拦截器对象addInterceptor(Interceptor拦截器),添加网络拦截器对象addNetworkInterceptor(Interceptor拦截器),这个拦截器对象后面会讲到。

2)创建Request对象

这里我们不能直接通过new创建Request对象。因为Request的构造函数不是public的,所以我们可以通过创建Request的内部类对象来获取Request。

请求request=new Request.Builder().build();

创建Request对象时,可以配置url地址、请求方法、请求头。

配置url地址:

请求request=new Request.Builder().url(String url).build();

与其他配置方法一样,只需键入“.”即可。直接在Builder() 之后调用它。我直接把方法贴出来。

设置请求方式:

1.获取请求

get() //Request.Builder方法

get请求不需要设置。默认是get请求。您无需手动设置请求方法。

2. 发布请求

post(RequestBody requestBody)//Request.Builder方法

RequestBody 这个类是一个接口,我们通常传入它的子类FormBody。

创建一个FormBody 对象。与Request一样,该类的构造函数不是公共的。通过创建FormBody的内部类对象来获取FormBody。

FormBody formBody=new FormBody.Builder().build();

post请求一般都有参数。如果post请求没有参数,我们可以直接作为get请求来请求就可以了。那么post请求的参数在哪里添加呢?通过add(String name, String value)在FormBody中添加参数信息。

添加请求头:

addHeader(String name,String value)//Request.Builder方法

3)通过OkHttpClient对象发起请求

通过OkHttpClient的newCall(Requset request)方法返回Call对象。 Call对象是网络请求的真正执行者。

调用call=okHttpClient.newCall(request);

请求方式有2种:

1:同步请求

发出同步请求后,线程将进入阻塞状态,等待请求完成后继续执行。但在Android中我们不能阻塞UI线程,它是主线程。如果主线程被阻塞,程序会直接挂掉。这就是我们常说的ANR异常。所有使用同步请求时,都必须开启子线程来请求数据。

请求request=new Request.Builder()

//设置url地址

.url(url).build();

//获取调用对象

调用call=okHttpClient.newCall(request);

尝试{

//发送同步请求

响应response=call.execute();

//将结果转为字符串

字符串responseStr=response.body().string();

}catch (IOException e) {

e.printStackTrace();

}

2:异步请求

发出异步请求后,OkHttp会在内部开启一个线程来请求数据。数据请求完成后,将通过接口回调存储数据。主线程不会阻塞,但是以后的相关操作必须在数据回来时写入。

请求request=new Request.Builder()

//设置url地址

.url(url).build();

//获取调用对象

调用call=okHttpClient.newCall(request);

//发送异步请求

call.enqueue(new Callback() {

/*

这个内部类的方法都在子线程中。如果需要更新UI,则必须在线程之间切换。

*/

/**

* 监控失败的请求

* @参数调用

* @param e 失败错误信息

*/

@覆盖

公共无效onFailure(调用调用,最终IOException e){

//切换回主线程循环执行

runOnUiThread(new Runnable() {

@覆盖

公共无效运行(){

Toast.makeText(MainActivity.this,"错误消息:" +e.getMessage(), Toast.LENGTH_SHORT).show();

}

});

}

/**

* 监听请求成功

* @参数调用

* @param 响应请求结果

* @抛出IOException

*/

@覆盖

public void onResponse(调用调用,响应响应)抛出IOException {

//获取请求体对象

响应体responseBody=response.body();

//将请求结果转为字符串

最终字符串responseStr=responseBody.string();

/*

拿到数据后,Gson解析数据

*/

//切换回主线程循环执行

runOnUiThread(new Runnable() {

@覆盖

公共无效运行(){

Toast.makeText(MainActivity.this,"请求结果:" +responseStr, Toast.LENGTH_SHORT).show();

}

});

}

});

此时就可以使用OkHttp来发出一些简单的网络请求了。

下面说说给Okhttp配置拦截器:

有时我们需要添加响应头信息并拦截响应头。在我们实际的开发过程中,后台的联调也是通过拦截器来进行的。为什么拦截器很重要以及如何使用它?

拦截器有两种类型

1.应用拦截器

addInterceptor(Interceptor拦截器) //OkHttpClient.Builder方法

应用程序拦截器也称为日志拦截器。您可以自己手动编写应用拦截器,也可以导入并依赖Okhttp提供的应用拦截器。

1).手动编写拦截器

//创建拦截器对象

拦截器拦截器=new Interceptor() {

@覆盖

公共响应拦截(链链)抛出IOException {

//获取请求对象

请求request=chain.request();

//获取响应对象

响应response=chain.proceed(request);

//获取所有响应头

标头headers=response.headers();

//方便所有响应头

设置名称=headers.names();

for (字符串名称: 个名称) {

Log.d("OkHttpUtils", name + ":" + headers.get(name));

}

//一定要返回原来的response对象,不要使用new。否则无法请求数据

返回响应;

}

};

2).导入依赖实现拦截器

实现"com.squareup.okhttp3:logging-interceptor:3.5.0"

//创建拦截器对象

HttpLoggingInterceptor拦截器=new HttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT);

//设置打印信息。 HEADERS 是响应头,BODY 是响应正文,NONE 不打印。 BASIC是基本信息(响应头和响应体)。

Interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);

2.网络拦截器

addNetworkInterceptor(Interceptor拦截器) //OkHttpClient.Builder方法

网络拦截器通常用于添加响应头和拦截响应头,例如设置缓存。网络拦截器只能手动编写,并且没有可导入的依赖项。

拦截器拦截器=new Interceptor() {

@覆盖

公共响应拦截(链链)抛出IOException {

//获取请求对象

请求request=chain.request();

//获取响应对象

响应response=chain.proceed(request);

//通过原始Response对象获取Response.Builder

Response.Builder responseBuilder=response.newBuilder();

//添加响应头

响应新响应=responseBuilder

.addHeader("键","值")

.addHeader("key2","value2").build();

//返回新获得的Response对象

返回新响应;

}

};

最后说说设置缓存

我们发出的网络请求通常会缓存数据。这将节省用户流量。

cache(Cache cache) //OkHttpClient.Builder方法

缓存分为两种情况:

1).后台服务器支持缓存

如果后端服务器支持缓存(响应头中有"Cache-Control"字段),则直接设置存储地址和文件大小即可。

//创建Cache对象App.context.getCacheDir() 获取app的dir目录文件大小

缓存缓存=new Cache(App.context.getCacheDir(),1024 *1024 *10);

2).后台服务器不支持缓存

如果后端服务器不支持缓存(响应头中没有“Cache-Control”字段)。需要拦截响应头,手动添加"Cache-Control"字段,并设置存储地址和文件大小。

1.手动添加"Cache-Control"字段

拦截器拦截器=new 拦截器() {

@覆盖

公共响应拦截(链链)抛出IOException {

//获取请求对象

请求request=chain.request();

//获取响应对象

响应response=chain.proceed(request);

//通过原始Response对象获取Response.Builder

Response.Builder responseBuilder=response.newBuilder();

//添加响应头

响应新响应=responseBuilder

//添加Cache-Control字段以支持缓存

.addHeader("Cache-Control","max-age=" +60 *60 *12)

。建造();

//返回新获得的Response对象

返回新响应;

}

};

2. 设置存储地址和文件大小。

//创建Cache对象App.context.getCacheDir() 获取app的dir目录文件大小

高效网络请求攻略:掌握OkHttp3的简易运用技巧的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、高效网络请求攻略:掌握OkHttp3的简易运用技巧的信息别忘了在本站进行查找哦。

用户评论

你与清晨阳光

想学习一下OkHttp3的使用,这篇文章应该能帮到我吧!

    有14位网友表示赞同!

孤者何惧

最近在做项目用到网络请求,看到OkHttp3挺热门的,来试试看。

    有13位网友表示赞同!

屌国女农

终于找到一篇简单的OkHttp3讲解了,希望能上手得更快!

    有20位网友表示赞同!

枫无痕

对于初学者来说,这样深入浅出的解释还是挺好的,理解性强。

    有15位网友表示赞同!

优雅的叶子

以前用的HttpClient,现在听说OkHttp3性能更佳,要学习一下新技能啦!

    有5位网友表示赞同!

在哪跌倒こ就在哪躺下

网络请求这块一直没太明白,希望能通过这篇文章加深了解。

    有17位网友表示赞同!

∞◆暯小萱◆

看标题就觉得这篇文章很实用的,直接上手操作就好。

    有5位网友表示赞同!

安好如初

准备开始Android开发了,OkHttp3应该是必备的工具吧!

    有16位网友表示赞同!

安陌醉生

文章讲解清晰易懂,代码示例也很实用,好评!

    有15位网友表示赞同!

鹿叹

OkHttp3的使用范围挺广泛的,可以用来做很多网络请求场景。

    有16位网友表示赞同!

爱到伤肺i

之前没接触过OkHttp3,感觉这篇文章是一篇很好的入门教程。

    有10位网友表示赞同!

米兰

这篇文字带我点通了不少网络请求的知识点,原来是这样操作的!

    有11位网友表示赞同!

几妆痕

学习OkHttp3的小技巧,可以让我在开发中更有效率!

    有5位网友表示赞同!

轨迹!

想用OkHttp3来实现自定义的网络请求接口,这篇文章可以参考一下。

    有6位网友表示赞同!

开心的笨小孩

分享给一起学习的朋友吧,这个学习资料很实用的!

    有11位网友表示赞同!

有些人,只适合好奇~

看完文章之后感觉OkHttp3操作还是挺容易上手的。

    有8位网友表示赞同!

为爱放弃

希望以后写一些更深入的技术讲解,对OkHttp3的功能实现有一个更深层次的理解。

    有16位网友表示赞同!

琴断朱弦

网络请求这块经常会遇到问题,学习OkHttp3可以解决很多麻烦!

    有9位网友表示赞同!

凉笙墨染

如果文章后面能提供更多的使用案例,那就更好了!

    有12位网友表示赞同!

【高效网络请求攻略:掌握OkHttp3的简易运用技巧】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:好莱坞经典三部曲大揭秘:《星球大战》第三,此片位居榜首无人争议 下一篇:探索神秘夜空:揭秘遥远星辰的秘密