电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android OKHttp使用簡介

瀏覽:50日期:2022-09-18 15:06:40
目錄配置創建OkHttpClient同步get請求異步get請求同步post請求異步post請求上傳文件表單提交

下面是官網給出的OKHTTP的特點:

支持HTTP/2, HTTP/2通過使用多路復用技術在一個單獨的TCP連接上支持并發, 通過在一個連接上一次性發送多個請求來發送或接收數據; 如果HTTP/2不可用, 連接池復用技術也可以極大減少延時; 透明的Gzip處理降低了通信數據的大小 響應緩存完全避免了網絡中的重復請求 使用Okio來簡化數據的訪問與存儲,提高性能 如果您的服務器配置了多個IP地址, 當第一個IP連接失敗的時候, OkHttp會自動嘗試下一個IPOkHttp還處理了代理服務器問題和SSL握手失敗問題;

官網地址:square.github.io/okhttp/

配置

添加OKHttp依賴

implementation ’com.squareup.okhttp3:okhttp:3.12.3’

添加網絡權限,如果需要文件讀寫文件讀寫權限

<uses-permission android:name='android.permission.INTERNET' /><uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE' /><uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE' />

接下來就可以愉快的開始使用OKhttp進行開發了。

創建OkHttpClient

OKhttpclient通過builder構建,構建的時候涉及到很多配置項,本次簡單對其中一些配置項做了說明,后續會對一些重要的配置項做專題說明。在實際的項目中的配置項根據項目具體需求進行配置。

OkHttpClient.Builder builder = new OkHttpClient.Builder(); //緩存目錄 File externalCacheDir = context.getExternalCacheDir(); if (externalCacheDir != null) {Cache okHttpCache = new Cache(new File(externalCacheDir,'HttpCache'), 30 * 1024 * 1024);builder.cache(okHttpCache); } //連接超時時間,連接超時是在將TCP SOCKET 連接到目標主機時應用的,默認10s builder.connectTimeout(30, TimeUnit.SECONDS); //讀取超時時間, 包括TCP SOCKET和Source 和Response的讀取IO操作,默認10s builder.readTimeout(20, TimeUnit.SECONDS); //寫入超時時間,主要指IO的寫入操作,默認10s builder.writeTimeout(20, TimeUnit.SECONDS); //整個調用時期的超時時間,包括解析DNS、鏈接、寫入請求體、服務端處理、以及讀取響應結果 builder.callTimeout(120, TimeUnit.SECONDS); //用于單個client監聽所有解析事件的,可以用于解析耗時計算 builder.eventListener(EventListener.NONE); //添加攔截器,框架內部已經默認添加了部分攔截器,通過接口添加的攔截器在列表首部 builder.addInterceptor(new LogInterceptor()); //添加網絡攔截器,網絡攔截器可以操作重定向和失敗重連的返回值,以及監控所有的網絡數據 builder.addNetworkInterceptor(new NetworkInterceptor()); //在握手期間,如果URL的主機名和服務器的標識主機名不匹配,驗證機制可以回調此接口的實現者,以確定是否應該允許此連接。 //返回false表示不允許此鏈接,無腦return true 十分不安全 builder.hostnameVerifier(new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) { return true;} });//授權,默認為Authenticator.NONE//builder.authenticator(Authenticator.NONE);//連接池,默認5個空閑連接,連接保活5分鐘//builder.connectionPool(new ConnectionPool());//自定義CookieJar,默認CookieJar.NO_COOKIES//builder.cookieJar(CookieJar.NO_COOKIES);//調度策略,默認最大并發數默認為 64,但個域名最大請求數 默認為 5 個//builder.dispatcher(new Dispatcher());//配置證書認證策略//builder.sslSocketFactory(); OkHttpClient client = builder.build();

上述配置項中比較常用的有

緩存文件路徑以及緩存的容量大小 網絡請求的鏈接、讀取、寫入的超時時間 攔截器,這個是OKHTTP最常用的,可以用于處理包括重試、緩存、日志打印等功能 域名和證書的校驗 連接器以及并發的調度策略等 同步get請求

public void synGet(String url) {// 第一步,構建HttpUrlHttpUrl.Builder builder = null;try { HttpUrl httpUrl = HttpUrl.parse(url); if(httpUrl != null){builder = httpUrl.newBuilder(); }} catch (IllegalArgumentException e) { e.printStackTrace();}if (builder == null) { return;}builder.addQueryParameter('key','value');// 第二步,構建Request請求對象Request request = new Request.Builder()//請求地址.url(httpUrl)//get請求,默認為get請求.get()//添加請求頭,一個key對應多個value,可以自定義.addHeader('key', 'value').addHeader('key', 'value1')//請求頭,一對一的,如常見的Content-Type、Accept-Encoding等.header('key1', 'value1')//緩存策略,當前使用強制網絡請求.cacheControl(CacheControl.FORCE_NETWORK)//緩存策略.build();try { //第三步,開始進行同步請求 Response response = client .newCall(request) .execute(); //第四步,解析響應結果 ResponseBody body = response.body(); if (body != null) {Log.d(TAG, body.string()); }} catch (IOException e) { e.printStackTrace();} }

同步get請求會阻塞當前線程直到返回結果,請求大致分為四個步驟:

構建HttpUrl,當然這一步不是必須的,也可以直接傳入地址 第二步,構建Request請求對象,可以設置請求頭,緩存策略,請求方式 第三步,開始進行同步請求 解析響應結果

注意:同步get請求要在子線程中進行,否應用會拋異常。

異步get請求

異步請求方式的步驟和上述前兩個步驟基本一致,主要發起請求的方式發生了變化,結果通過回調返回。這種請求方式對請求的線程沒有限制。

// 第一步,構建HttpUrl// 第二步,構建Request請求對象//第三步,開始進行異步請求client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException {//第四步,解析響應結果ResponseBody body = response.body();if (body != null) { Log.d(TAG, body.string());} }});同步post請求

public void synPost(String url) { // 第一步,構建HttpUrl HttpUrl.Builder builder = null; try {HttpUrl httpUrl = HttpUrl.parse(url);if (httpUrl != null) { builder = httpUrl.newBuilder();} } catch (IllegalArgumentException e) {e.printStackTrace(); } if (builder == null) {return; } //第二步,構建RequestBody MediaType mediaType = MediaType.parse('application/json;charset=UTF-8'); JSONObject jsonObject = new JSONObject(); try {jsonObject.put('key1', 'value1');jsonObject.put('key2', 'value2'); } catch (JSONException e) {e.printStackTrace(); } RequestBody requestBody = RequestBody.create(mediaType, jsonObject.toString()); // 第三步,構建Request請求對象 Request request = new Request.Builder() .url(builder.build()) .post(requestBody) .build();//第四步,開始進行同步post請求 try {Response response = client.newCall(request).execute();//第五步,解析請求結果ResponseBody body = response.body();if (body != null) { Log.d(TAG, body.string());} } catch (IOException e) {e.printStackTrace(); }}

與get請求方式不同的是post請求需要構建RequestBody,在請求時攜帶RequestBody。

異步post請求

public void asynPost(String url) {// 第一步,構建HttpUrl//第二步,構建RequestBody// 第三步,構建Request請求對象Request request = new Request.Builder().url(builder.build()).post(requestBody).build();client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException {ResponseBody body = response.body();if (body != null) { Log.d(TAG, body.string());} }}); }上傳文件

//第一步,構建HttpUrl //第二步,構建RequestBody MediaType mediaType = MediaType.parse('multipart/form-data; charset=utf-8'); RequestBody requestBody = RequestBody.create(mediaType, file);//第三步,構建MultipartBody MultipartBody body = new MultipartBody.Builder() .setType(MultipartBody.FORM) //在此處添加多個requestBody實現多文件上傳 .addFormDataPart('file', file.getName(), requestBody) .build(); // 第四步,構建Request請求對象 Request request = new Request.Builder() .url(builder.build()) .post(body) .build();// 第五步,構建Request請求對象 client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException { ResponseBody body = response.body(); if (body != null) {Log.d(TAG, body.string()); }} });表單提交

//第二步,構建RequestBody FormBody formBody = new FormBody.Builder() .add('key1','value1') .add('key2','value2') .build(); // 第三步,構建Request請求對象 Request request = new Request.Builder() .url(builder.build()) .post(formBody) .build(); client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException { ResponseBody body = response.body(); if (body != null) {Log.d(TAG, body.string()); }} });

以上就是OKHttp 使用簡介的詳細內容,更多關于OKHttp 使用的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 无水硫酸铝,硫酸铝厂家-淄博双赢新材料科技有限公司 | 无机纤维喷涂棉-喷涂棉施工工程-山东华泉建筑工程有限公司▲ | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 焦作网 WWW.JZRB.COM| 无水硫酸铝,硫酸铝厂家-淄博双赢新材料科技有限公司 | 商秀—企业短视频代运营_抖音企业号托管 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 |