亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中OkHttp如何使用

發布時間:2021-06-29 15:58:07 來源:億速云 閱讀:260 作者:Leah 欄目:移動開發

Android中OkHttp如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、     OkHttp特點

Android 為我們提供了兩種HTTP交互的方式: HttpURLConnection 和 Apache HTTP Client,雖然兩者都支持HTTPS,流的上傳和下載,配置超時,IPv6和連接池,已足夠滿足我們各種HTTP請求的需求。但更高效的使用HTTP 可以讓您的應用運行更快、更節省流量。而OkHttp庫就是為此而生。

OkHttp是一個高效的HTTP庫:

§  支持  SPDY(引用層協議) ,共享同一個Socket來處理同一個服務器的所有請求

§  如果SPDY不可用,則通過連接池來減少請求延時

§  無縫的支持GZIP來減少數據流量

§  緩存響應數據來減少重復的網絡請求

會從很多常用的連接問題中自動恢復。如果您的服務器配置了多個IP地址,當第一個IP連接失敗的時候,OkHttp會自動嘗試下一個IP。OkHttp還處理了代理服務器問題和SSL握手失敗問題。

使用 OkHttp 無需重寫您程序中的網絡代碼。OkHttp實現了幾乎和java.net.HttpURLConnection一樣的API。如果您用了 Apache HttpClient,則OkHttp也提供了一個對應的okhttp-apache 模塊。

二、     如何導入OkHttp

1、          Android studio中使用

在gradle中添加:

compile  'com.squareup.okhttp:okhttp:2.7.0'

由于OkHttp依賴okio,所以還需要添加:

'com.squareup.okio:okio:1.6.0'

2、          Eclipse中使用:

只需要下載相應的Jar包然后放入工程即可使用。

下載地址:

http://square.github.io/okhttp/#download

 

三、     如何使用

1、          創建請求對象,請給請求設置參數:使用了Request類的內部Builder類。非常類似于我們以前學校的對話框、通知等的創建手法。  需要至少設置一個url參數。

Request request = new Request.Builder()

                 .url("http://www.qq.com")

                .build();

2、          創建OkHttp客戶端對象:

OkHttpClient client = new OkHttpClient();

3、          調用OkHttpClient對象的newCall方法,獲取Call對象。

Call call = client.newCall(request);

如果需要同步執行網絡請求執行4、5、6

如果需要異步執行網絡執行4a:(Android推薦)

-------------------------------------------------------------------------------------------------

4、          調用call對象的execute方法,發出網絡請求,獲取Response對象。

Response response = call.execute(); //改方法會阻塞線程

5、          調用response的body方法方法獲取相應體。

ResponseBody body = response.body();

6、          調用ResponseBody的相應方法獲取具體響應內容。

body.string();  //如果結果為字符類型,調用這個方法,默認編碼utf-8

body.bytes();  //返回字節數組

body.byteStream();   //返回字節輸入流。

------------------------------------------------------------------------------------------------

4a、    調用call的enqueue(CallBack)方法,把請求法如請求隊列。

          call.enqueue(new  Callback() {

               //響應失敗后的回調

               @Override

               public void onFailure(Request request,  IOException e) {

               

               }

               //響應成功后的回調

              //注意這個方法的回調是在子線程中,所以如果要修改UI也必須使用其他手//段。

               @Override

               public void onResponse(Response response)  throws IOException {

 

               }

           });

四、     Get請求

方法一:1、調用Request.builder  對象的get()方法來設置請求方法為”get”請求。

方法二:2、調用Request.builder  對象的method("GET", null)方法來設置請求方法為“get”請求。

 

注意:method中的第二個參數表示是請求體,因為get請求的請求參數可以直接跟在url后面,所以中get請求的時候可以傳遞null

五、     Post請求

方法一:1、調用Request.builder  對象的post(requestBody)方法來設置請求方法為”get”請求。

方法二:2、調用Request.builder  對象的method("POST", requestBody)方法來設置請求方法為“get”請求。

 

注意:

1、          post的請求參數(請求體requestBody)必須有,不能為null。如果為null會拋異常。

2、          關于RequestBody:

RequestBody是個抽象類。

a:使用RequestBody提交鍵值對

        RequestBody body = new FormEncodingBuilder()

                 .add("name","zs")

                .add("pwd",  "aaa")

                .build();

 

 

六、     OkHttp文件上傳

File file = new File(Environment.getExternalStorageDirectory(),  "a.mp4");

//application/octet-stream 代表文件是二進制類型(任何文件都可以)

MediaType fileType =  MediaType.parse("application/octet-stream");

RequestBody body = RequestBody.create(fileType, file);

七、     OkHttp同時上傳文件和表單數據

        File file = new  File(Environment.getExternalStorageDirectory(), "a.mp4");

         Log.e("aaa", file+"");

         //application/octet-stream 代表文件是二進制類型(任何文件都可以)

        MediaType fileType =  MediaType.parse("application/octet-stream");

        RequestBody body =  RequestBody.create(fileType, file);

        //創建MultipartBuilder對象。

        RequestBody body1 =  new MultipartBuilder()

                 .addFormDataPart("music", "good music")  //普通表單數據

                 .addFormDataPart("mp3", "apple.mp3", body)  //文件

                .build();

 

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深圳市| 监利县| 凤阳县| 禄丰县| 离岛区| 黄龙县| 秭归县| 扎赉特旗| 秦安县| 丘北县| 北安市| 库尔勒市| 金堂县| 文水县| 红河县| 齐齐哈尔市| 贞丰县| 兴城市| 珠海市| 碌曲县| 海林市| 龙岩市| 永春县| 鄄城县| 南平市| 安吉县| 宜黄县| 九台市| 泽库县| 陆良县| 蕲春县| 依兰县| 呼玛县| 和田县| 仲巴县| 滕州市| 芮城县| 庄浪县| 台州市| 英吉沙县| 南靖县|