日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android第三方代码,Android--第三方控件--okHttp(示例代码)

發(fā)布時(shí)間:2023/12/19 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android第三方代码,Android--第三方控件--okHttp(示例代码) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Android中有很多的第三方控件,其中OkHttp是一個(gè)很強(qiáng)大的用于網(wǎng)絡(luò)加載的第三方控件,當(dāng)然了,它的內(nèi)部也是使用原生的代碼封裝好的。今天我們就來(lái)看一下OkHttp的簡(jiǎn)單用法:

說(shuō)到網(wǎng)絡(luò)請(qǐng)求,肯定就分get和post兩種了,這里我們說(shuō)一下get和post的簡(jiǎn)單實(shí)用:

首先我們需要先在我們的項(xiàng)目中引入OkHttp的依賴,在你的項(xiàng)目的gradle下面的dependencies下添加依賴:

1 compile ‘com.squareup.okhttp3:okhttp:3.4.1‘

然后同步項(xiàng)目,會(huì)自動(dòng)下載OkHttp相關(guān)的依賴。或者也可以這樣,選中此工作空間的設(shè)置:

----》選中你要添加依賴(要使用OkHttp)的項(xiàng)目,選擇添加類(lèi)庫(kù)依賴

在搜索框中輸入你想要下載的第三方框架,點(diǎn)搜索哪個(gè)按鈕,選中想要下載的,點(diǎn)擊OK,完成。

Get方式:我們先看一段代碼:

1 private voidhttpget() {2 //okhttpclient :okthttp主要類(lèi)

3 OkHttpClient client=newOkHttpClient();4 /*

5 Request:請(qǐng)求服務(wù)端6 Request.Builder():設(shè)計(jì)模式:將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與他的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,他的每一個(gè)屬性的設(shè)置都返回一個(gè)builder對(duì)象,也就是說(shuō)可以一直使用.XX的形式為其設(shè)置屬性7 build:結(jié)束,返回Request對(duì)象8 */

9 Request request=newRequest.Builder().url(path).build();10 //Call 將你的請(qǐng)求封裝成任務(wù)

11 Call call=client.newCall(request);12 //請(qǐng)求調(diào)度

13 call.enqueue(newCallback() {14 //失敗

15 @Override16 public voidonFailure(Call call, IOException e) {17

18 }19 //成功

20 @Override21 public void onResponse(Call call, Response response) throwsIOException {22 //返回String

23 String json=response.body().string();24 Log.i("TAG","----->get"+json);25 //返回byte[]

26 response.body().bytes();27 //返回流

28 response.body().byteStream();29 }30 });31 }

如上所示,我們要使用OkHttp的時(shí)候,首先要先new一個(gè)OkHttpClient對(duì)象,OkHttpClient是其一個(gè)主要的類(lèi),Response對(duì)象用來(lái)構(gòu)建我們需要額外傳遞的值(如head,method等)和一些其他需要設(shè)置的參數(shù),而Call對(duì)象是用來(lái)封裝任務(wù)并執(zhí)行調(diào)度的。我們調(diào)用call.enqueue()方法,將call加入調(diào)度隊(duì)列,在enqueue()方法中我們通過(guò)匿名內(nèi)部類(lèi)的形式實(shí)現(xiàn)這個(gè)CallBack接口,并實(shí)現(xiàn)其中的兩個(gè)方法,onFailure()方法是請(qǐng)求網(wǎng)絡(luò)失敗的時(shí)候會(huì)執(zhí)行的方法,onResponse()是請(qǐng)求成功的時(shí)候會(huì)執(zhí)行的方法。我們主要看onResponse()方法,可以看到,我們?cè)趏nResponse()方法中通過(guò)回傳的Response對(duì)象得到我們想要的網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)。通過(guò)response.body()方法我們能得到ResponseBody對(duì)象,在這個(gè)對(duì)象中我們可以通過(guò)方法獲得到字符串、字節(jié)數(shù)組和輸入流。也就是說(shuō)這個(gè)地方是支持大文件下載的。不過(guò)也說(shuō)明了onResponse()方法不是在主線程中執(zhí)行的,同樣的,onFailure()方法也是在子線程中執(zhí)行,只要我們調(diào)用了enqueue(),OkHttp會(huì)為我們開(kāi)啟一個(gè)子線程。我們可以通過(guò)使用handler來(lái)實(shí)現(xiàn)UI更新。當(dāng)然,我們也可以像這樣通過(guò)call.excute()方法直接返回一個(gè)Response()對(duì)象:

1 OkHttpClient client = newOkHttpClient();2 Request request = newRequest.Builder().url(path).build();3 try{4 Response res =client.newCall(request).execute();5 Log.d("tag", "onResponse: "+res.body().string());6 } catch(IOException e) {7 e.printStackTrace();8 }

Post方式:

1 private voidhttppost() {2 //okhttpclient :okthttp主要類(lèi)

3 OkHttpClient client=newOkHttpClient();4 /*

5 RequestBody:請(qǐng)求體,攜帶參數(shù)去服務(wù)端訪問(wèn)6 FormBody:設(shè)置表單參數(shù),用它來(lái)設(shè)置要攜帶的參數(shù)7 FormBody.Builder():設(shè)計(jì)模式:將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與他的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示8 build:結(jié)束,返回一個(gè)RequestBody9 */

10 RequestBody body=new FormBody.Builder().add("name","xiaoming").add("age","18").build();11 //創(chuàng)建Request

12 Request request=newRequest.Builder().url(path).post(body).build();13 //Call 將你的請(qǐng)求封裝成任務(wù)

14 Call call=client.newCall(request);15 //請(qǐng)求調(diào)度

16 call.enqueue(newCallback() {17 //失敗

18 @Override19 public voidonFailure(Call call, IOException e) {20

21 }22 //成功

23 @Override24 public void onResponse(Call call, Response response) throwsIOException {25 String json=response.body().string();26 Log.i("TAG","----->post"+json);27

28 response.body().byteStream();29 response.body().bytes();30 }31 });32 }

get方式請(qǐng)求如果熟悉了,post其實(shí)與它一樣,只是在構(gòu)建的時(shí)候需要多傳遞幾個(gè)參數(shù)而已。可以看到,我們?cè)谏厦鏄?gòu)建Request對(duì)象的時(shí)候先構(gòu)建了一個(gè)RequestBody對(duì)象,有代碼可見(jiàn),RequestBody對(duì)象也是一個(gè)Builder設(shè)計(jì)模式,設(shè)置完參數(shù)后不要忘了調(diào)用其build()方法完成構(gòu)建。在封裝Request對(duì)象的時(shí)候有點(diǎn)不同:

1 Request request=new Request.Builder().url(path).post(body).build();

可以看到我們?cè)谠O(shè)置了其url屬性后又調(diào)用了post,并將剛才構(gòu)建的RequestBody()對(duì)象傳遞進(jìn)去。這說(shuō)明我們使用的post方式。下面的請(qǐng)求調(diào)度方法與get相同,不再贅述。

可以看到,網(wǎng)絡(luò)訪問(wèn)的代碼還是不少的,如果每次網(wǎng)絡(luò)訪問(wèn)我們都要寫(xiě)這么多的代碼的話,那可毀了,所以我們下面去封裝一個(gè)工具類(lèi),這里以get方式為例:

1 packageggcomic.rabbit.lx.ggcomic.utils;2

3 importjava.io.IOException;4

5 importokhttp3.Call;6 importokhttp3.OkHttpClient;7 importokhttp3.Request;8 importokhttp3.Response;9

10 /**

11 * OkHttp網(wǎng)絡(luò)加載(單例模式)12 * Created by Lx on 2016/9/12.13 */

14 public classOkHttpUtils {15 publicOkHttpUtils() {16 }17

18 public static OkHttpUtils okHttpUtils = newOkHttpUtils();19

20 public staticOkHttpUtils getInstance() {21 returnokHttpUtils;22 }23

24 OkHttpClient client = newOkHttpClient();25

26 /**

27 * 官方28 * 直接得到string字符串29 *@parampath30 *@return

31 *@throwsIOException32 */

33 public String run(String path) throwsIOException {34 Request request = newRequest.Builder().url(path).build();35 //官方封裝的方法,沒(méi)有請(qǐng)求調(diào)度,在使用該工具類(lèi)的時(shí)候要啟動(dòng)一個(gè)線程,36 //使用client.newCall(request).enqueue(new CallBack(){...})的時(shí)候不需要啟動(dòng)線程

37 Response response =client.newCall(request).execute();38 returnresponse.body().string();39 }40

41 /**

42 * 非官方43 * 獲得call實(shí)例44 *@parampath45 *@return

46 */

47 publicCall getCallInstance(String path) {48 Request request = newRequest.Builder().url(path).build();49 Call call =client.newCall(request);50 returncall;51 }52

53 }

這里我們使用了單例模式的餓漢式寫(xiě)法。這里工具類(lèi)的寫(xiě)法有兩種,一種是官方的,一種是非官方的,看代碼可以知道,官方封裝的方法無(wú)法處理請(qǐng)求失敗時(shí)的操作,因?yàn)樗苯臃祷亟o我們一個(gè)Response對(duì)象,而非官方的是我自己的寫(xiě)法,這里返回一個(gè)Call對(duì)象,我們?cè)诖a中使用非官方的寫(xiě)法:

1 OkHttpUtils.getInstance().getCallInstance(String url).enqueue(newCallback() {2 @Override3 public voidonFailure(Call call, IOException e) {4 handler.post(newRunnable() {5 @Override6 public voidrun() {7 //網(wǎng)絡(luò)連接失敗時(shí)的操作

8 }9 });10 }11

12 @Override13 public void onResponse(Call call, Response response) throwsIOException {14 //網(wǎng)絡(luò)連接成功時(shí)的操作

15 }16 });

我們先是調(diào)用getInstance()方法得到一個(gè)OkHttp實(shí)例,然后再調(diào)用其中的方法,在里面完成相應(yīng)的操作即可。

到這里OkHttp的簡(jiǎn)單的使用就結(jié)束了,其實(shí)算算沒(méi)有多少代碼,還是比較簡(jiǎn)單的對(duì)吧~如果想要深入的了解OkHttp,請(qǐng)移文鴻洋大神的這篇博客:

寫(xiě)的特別的全面。

總結(jié)

以上是生活随笔為你收集整理的android第三方代码,Android--第三方控件--okHttp(示例代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。