<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      OkHttp基本使用

      OkHttp介紹

      Android系統(tǒng)提供了兩種HTTP通信類,HttpURLConnection和HttpClient,HttpURLConnection相對來說比HttpClient難用,google自從2.3版本之后一直推薦使用HttpURLConnection,并且在6.0版本的sdk中直接刪掉了HttpClient類。

      但是, 上面兩個類庫和OkHttp比起來就弱爆了, 因為OkHttp不僅具有高效的請求效率,并且節(jié)省寬帶, 還提供了很多開箱即用的網(wǎng)絡(luò)疑難雜癥解決方案.(據(jù)說Android4.4的源碼中可以看到OkHttp替換了HttpURLConnection)

      • 支持HTTP/2, HTTP/2通過使用多路復用技術(shù)在一個單獨的TCP連接上支持并發(fā), 通過在一個連接上一次性發(fā)送多個請求來發(fā)送或接收數(shù)據(jù)
      • 如果HTTP/2不可用, 連接池減少請求延遲
      • 支持GZIP, 可以壓縮下載體積
      • 響應緩存可以避免重復請求網(wǎng)絡(luò)
      • 會從很多常用的連接問題中自動恢復,如果您的服務(wù)器配置了多個IP地址,當?shù)谝粋€IP連接失敗的時候,OkHttp會自動嘗試下一個IP
      • OkHttp還處理了代理服務(wù)器問題和SSL握手失敗問題

      OkHttp基本使用

      概述

      前面的內(nèi)容介紹了OkHttp,本章就來教大家okhttp的基本使用,學了這些基本東西之后,大家有其他的需求可以自行擴展。以下的所有請求都是異步請求服務(wù)器,在真實的企業(yè)開發(fā)中,基本都是異步。

      • get請求
      • post請求
      • 文件上傳

      依賴

      Android Studio可以在線依賴,在app/build.gradle文件中加上下面這句話就行

      compile 'com.squareup.okhttp3:okhttp:3.8.0'
      

      get請求

      首先需要創(chuàng)建一個全局的OkHttpClient對象,所有的Http請求都共用這個對象就行。

      private OkHttpClient client = new OkHttpClient();
      

      一般從服務(wù)器獲取信息的接口都是get請求,這里我們調(diào)用獲取用戶信息接口。

      private void getUserInfo(){
          //創(chuàng)建一個Request
          Request.Builder builder = new Request.Builder().url("http://139.196.35.30:8080/OkHttpTest/getUserInfo.do");
          execute(builder);
      }
      
      //執(zhí)行請求
      private void execute(Request.Builder builder){
          Call call = client.newCall(builder.build());
          call.enqueue(callback);//加入調(diào)度隊列
      }
      
      //請求回調(diào)
      private Callback callback=new Callback(){
              @Override
              public void onFailure(Call call, IOException e) {
                  Log.i("MainActivity","onFailure");
                  e.printStackTrace();
              }
      
              @Override
              public void onResponse(Call call, Response response) throws IOException {
                  //從response從獲取服務(wù)器返回的數(shù)據(jù),轉(zhuǎn)成字符串處理
                  String str = new String(response.body().bytes(),"utf-8");
                  Log.i("MainActivity","onResponse:"+str);
      
                  //通過handler更新UI
                  Message message=handler.obtainMessage();
                  message.obj=str;
                  message.sendToTarget();
              }
      };
      
      
      • 首先創(chuàng)建一個request對象,通過request設(shè)置請求url,通過這個類還可以設(shè)置更多的請求信息。
      • 然后通過Request去構(gòu)造一個Call對象。
      • 調(diào)用enqueue執(zhí)行異步請求,有一個參數(shù)設(shè)置回調(diào)。請求成功或者失敗會調(diào)用Callback接口的onResponse跟onFailure方法,因為這是異步請求,在回調(diào)方法中是不能直接更新UI,所以我們需要通過Handler去更新UI。

      handler的代碼很簡單,就是把請求的結(jié)果顯示在TextView上

      private Handler handler=new Handler(){
          @Override
          public void handleMessage(Message msg) {
              String result= (String) msg.obj;
              tvResult.setText(result);
          }
      };
      

      Post請求

      通過調(diào)用登錄接口發(fā)送一個post請求。跟get不一樣的地方就是傳參數(shù)不一樣,post請求需要把參數(shù)封裝到RequestBody對象,調(diào)用Request對象的post方法把RequestBody傳入進去。最后調(diào)用execute方法執(zhí)行請求,這個方法前面get請求的時候講過。

      private void login(){
          //把請求參數(shù)封裝到RequestBody里面
          FormBody.Builder formBuilder = new FormBody.Builder();
          formBuilder.add("username","ansen");//請求參數(shù)一
          formBuilder.add("password","123");//請求參數(shù)二
          RequestBody requestBody = formBuilder.build();
      
          Request.Builder builder = new Request.Builder().url("http://139.196.35.30:8080/OkHttpTest/login.do").post(requestBody);
          execute(builder);
      }
      

      文件上傳

      上傳文件需要用到MultipartBody對象,通過調(diào)用addFormDataPart方法添加表單參數(shù),通過setType方法設(shè)置內(nèi)容類型,這邊設(shè)置form表單類型,調(diào)用自己的getUploadFileBytes方法獲取文件byte數(shù)組,通過addFormDataPart方法添加文件,后面的流程跟之前的post請求一樣。

      private void uploadFile(){
          MultipartBody.Builder builder = new MultipartBody.Builder();
          builder.addFormDataPart("username", "ansen");//表單參數(shù)
          builder.addFormDataPart("password", "123456");//表單參數(shù)
      
          builder.setType(MultipartBody.FORM);
          MediaType mediaType = MediaType.parse("application/octet-stream");
      
          byte[] bytes=getUploadFileBytes();//獲取文件內(nèi)容存入byte數(shù)組
          //上傳文件 參數(shù)1:name 參數(shù)2:文件名稱 參數(shù)3:文件byte數(shù)組
          builder.addFormDataPart("upload_file", "ansen.txt",RequestBody.create(mediaType,bytes));
          RequestBody requestBody = builder.build();
          Request.Builder requestBuider = new Request.Builder();
          requestBuider.url("http://139.196.35.30:8080/OkHttpTest/uploadFile.do");
          requestBuider.post(requestBody);
          execute(requestBuider);
      }
      

      如何證明文件有上傳到服務(wù)器呢?打開瀏覽器,輸入下面這個地址,就能看到文件內(nèi)容了。如果是本地服務(wù)器記得把139.196.35.30改成localhost。

      http://139.196.35.30:8080/OkHttpTest/upload/ansen.txt
      

      通過http協(xié)議請求服務(wù)器數(shù)據(jù),常用的就這幾種請求,如果有特殊需求自己擴展。例如:下載文件,從服務(wù)器下載圖片等。。。。

      服務(wù)器接口

      這三個接口的服務(wù)器代碼是我自己用java web寫的,開發(fā)工具用的是IntelliJ IDEA,服務(wù)器是tomcat,我部署在云上了,139.196.35.30是我的云服務(wù)器的外網(wǎng)ip,大家測試也方便。服務(wù)器代碼我放github上了,如果你想擴展接口,或者想看源碼都很方便。

      源碼下載

      服務(wù)器源碼

      Android客戶端源碼

      如果你想第一時間看我的后期文章,掃碼關(guān)注公眾號,每周不定期推送Android開發(fā)實戰(zhàn)教程文章...

            Android開發(fā)666 - 安卓開發(fā)技術(shù)分享
                   掃描二維碼加關(guān)注
      

      Android開發(fā)666

      posted @ 2017-06-09 15:58  安輝  閱讀(12531)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 激情内射亚洲一区二区三区| 中文字幕在线精品国产| 国产99青青成人A在线| 92精品国产自产在线观看481页| 亚洲国产另类久久久精品| yy111111在线尤物| 亚洲精品无码久久毛片| 99re6在线视频精品免费下载 | 国产成人午夜在线视频极速观看| 久久综合九色综合97婷婷| 国产亚洲精品一区二区无| 亚洲欧洲日产国码久在线| 性欧美三级在线观看| 国产成人精品永久免费视频| 97一期涩涩97片久久久久久久| 亚洲色一色噜一噜噜噜| 亚洲高清国产拍精品网络战| 99久久国产福利自产拍| 国产一区二区三区在线观看免费| 久久精品国产男包| 欧美肥老太牲交大战| 肇东市| 国产毛片三区二区一区| 1000部拍拍拍18勿入免费视频| 亚洲av男人电影天堂热app| jk白丝喷浆| 亚洲熟女乱色一区二区三区| 美乳丰满人妻无码视频| 久久国产自偷自偷免费一区| 4虎四虎永久在线精品免费| 中文字幕有码无码AV| 加勒比无码人妻东京热| 无码中文字幕av免费放| 国产精品一区二区三区蜜臀| 久久精品国产99国产精品澳门| 达州市| 国产午夜在线观看视频播放| 日亚韩在线无码一区二区三区| 2019亚洲午夜无码天堂| 老熟妇国产一区二区三区| 久久精品国产亚洲欧美|