欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Retrofit2的使用-創(chuàng)新互聯(lián)

Retrofit2

Android常用的網絡訪問HttpClient, HttpUrlConnection,OkHttp(okgo),xUtils, Volley等. Android4.4之后使用OkHttp作為HttpUrlConnection底層實現(xiàn)。這次講一下Retrofit2怎么使用。

成都創(chuàng)新互聯(lián)公司-專業(yè)網站定制、快速模板網站建設、高性價比隴西網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式隴西網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋隴西地區(qū)。費用合理售后完善,十年實體公司更值得信賴。

Retrofit2實際上是通過注解的方式對okhttp又一次封裝。

  1. 在AndroidStudio項目中,添加Retrofit2的依賴。

    compile 'com.squareup.retrofit2:retrofit:2.3.0'

程序構建成功后,查看項目具體依賴了多少jar包。

com.squareup.okhttp3:okhttp:3.8.0
com.squareup.okio:okio:1.13.0
com.squareup.retrofit2:retrofit:2.3.0

retrofit2 強制依賴了okhttp3的相關庫。這也說明了retrofit2底層是okhttp3具體實現(xiàn)的。okhttp3是用來具體訪問網絡的,okio是squareup對Java的io/nio的補充,使其更容易訪問,存儲和處理數(shù)據(jù)。okio主要功能封裝到了ByteString和Buffer里面了。

  1. 簡單的網絡訪問(以https://suggest.taobao.com/sug?code=utf-8&q=java&callback=cb為例)。

2.1. 首先實例化okhttp

OkHttpClient client = new OkHttpClient.Builder().build();
//實例化OkHttpClient的時候,還可以設置攔截器,緩存,認證信息,網絡攔截器,連接池,超時時間等信息。

2.2. 其次實例化retrofit,并將實例化好的okhttp3關聯(lián)到retrofit2。

Retrofit retrofit = new Retrofit.Builder().client(client).baseUrl("https://suggest.taobao.com/").build();

2.2.1 ...build()方法:

public Retrofit build() {
  if (baseUrl == null) {
    throw new IllegalStateException("Base URL required.");
  }

  okhttp3.Call.Factory callFactory = this.callFactory;
  if (callFactory == null) {
    callFactory = new OkHttpClient();
  }

  Executor callbackExecutor = this.callbackExecutor;
  if (callbackExecutor == null) {
    callbackExecutor = platform.defaultCallbackExecutor();
  }

  // Make a defensive copy of the adapters and add the default Call adapter.
  List<CallAdapter.Factory> adapterFactories = new ArrayList<>(this.adapterFactories);
  adapterFactories.add(platform.defaultCallAdapterFactory(callbackExecutor));

  // Make a defensive copy of the converters.
  List<Converter.Factory> converterFactories = new ArrayList<>(this.converterFactories);

  return new Retrofit(callFactory, baseUrl, converterFactories, adapterFactories,
      callbackExecutor, validateEagerly);
}

從這個方法里面可以看出,在實例化Retrofit的時候,baseUrl這個變量是必須要設置的,否則直接拋出IllegalStateException;而其余的一些信息如果不進行,程序里面會給設置一個默認的信息.默認給設置了OkHttpClient實例,OkHttp3連接池、解析工廠、CallAdapter等信息;然后返回了一個retrofit2實例。

2.3. 定義接口文件ApiService。

interface ApiService{
    @GET("sug?code=utf-8&q=java&callback=cb")
    Call<ResponseBody> getGithubApi();
}

定義一個接口信息。Retrofit2中訪問的一個網絡接口,返回的都是一個Call<ResponseBody> 實例,準確的說是Call<T>實例,但是這個實例中并沒有在實例化Retrofit2中設置addConverterFactory方法,如果需要解析成具體的JavaBean,則又需要依賴 'com.squareup.retrofit2:converter-gson:2.0.2', 'com.google.code.gson:gson:2.3.1'。當然再配合rxjava,rxandroid來使用的話,將是Android平臺很流行的網絡訪問框架,三者的整合封裝本文不講。

Retrofit2中支持多種注解來定義http網絡訪問,比如:POST,GET,DELETE,PUT;還支持多種標記注解FormUrlEncoded(使用到的注解都放到了retrofit2.http包下)

已2.3 ApiService接口為例。這個接口中定義了一個getGithubApi方法,該方法使用get方式提交,具體的路徑則寫到@GET("sug?code=utf-8&q=java&callback=cb"),我們知道get方式提交參數(shù)是直接將參數(shù)拼接到url地址后面。同樣也可以使用POST注解,表示該表單使用POST方式提交參數(shù),要提交的參數(shù)則需要傳入到方法里面了,該方法就應該這么定義getGithubApi(@Field("code") String code,@Field("q") String q,@Field("callback") String callback)或者getGithubApi(@FieldMap Map<String, String> params)//其中params的key作為參數(shù)名,value作為參數(shù)的值。

常用的注解表格

標記在方法名之上
序號
名稱 備注
1GET表示該方法使用GET方式提交參數(shù)。
2POST表示該方法使用POST方式提交參數(shù),這個經常和參數(shù)標記@Field和@FieldMap組合使用,也配合方法標記@FormUrlEncoded使用。
3PUT
4DELETE
5PATCH
6HEAD
7OPTIONS
8HTTP更加靈活的標記,這個標記里面可以指定,提交方式,path值,是否有body。
9Streaming返回流數(shù)據(jù),當服務器返回的數(shù)據(jù)過大時使用

比如:使用HTTP注解

@HTTP(method = "get", path = "zzhhz/{id}", hasBody = false)
Call<ResponseBody> getBlog(@Path("id") int id);

這里面指定了提交方式,path路徑,是否有body體。在這個地方path="zzhhz/{id}",id是不確定的,又要當一個參數(shù)傳進去,用{}標記變量,然后使用Path注解標記在方法形參前。

標記在形參之前:

序號 名稱 備注
1Field/FieldMap這個參數(shù)注解經常配合POST注解使用,因為POST是隱式提交參數(shù)。
2Part/PartMap這個經常是表示提交文件,又和Multipart,POST注解配合使用。
3Pathurl路徑,如上邊HTTP注解示例
4Query/QueryMap/QueryName查詢參數(shù),通常配合GET注解使用

2.4. 訪問數(shù)據(jù)。

ApiService githubService = retrofit.create(ApiService.class);
Call<ResponseBody> githubApi = githubService.getGithubApi();
Response<ResponseBody> execute = githubApi.execute();
if (execute != null && execute.isSuccessful()){
    String string = execute.body().string();
    System.out.println(string);
} else {
    System.out.println("訪問失敗");
}

之前說過Retrofit2強制依賴了OkHttp3, 在2.2實例化Retrofit2的時候,將已實例化的OkHttpClient傳入進Retrofit2里,供其進行網絡訪問。

Retrofit2和OkHttp3實例化過程中使用到了建造者模式(不贅述涉及模式)。

  1. 完整的網絡訪問設置:添加上攔截器(基于Java項目,開發(fā)工具IDEA)。

    @Test
    public void testRetrofit() throws IOException {
    //https://suggest.taobao.com/sug?code=utf-8&q=java&callback=cb

    OkHttpClient client = new OkHttpClient.Builder().addInterceptor((chain) -> {
        Request request = chain.request();
        return chain.proceed(request);
    }).readTimeout(60, TimeUnit.SECONDS).writeTimeout(60, TimeUnit.SECONDS).build();
    
    Retrofit retrofit = new Retrofit.Builder().client(client).baseUrl("https://suggest.taobao.com/").build();
    
    ApiService githubService = retrofit.create(ApiService.class);
    Call<ResponseBody> githubApi = githubService.getGithubApi();
    Response<ResponseBody> execute = githubApi.execute();
    if (execute != null && execute.isSuccessful()) {
        String string = execute.body().string();
        System.out.println(string);
    } else {
        System.out.println("訪問失敗");
    }

    }

    interface ApiService {@GET("sug?code=utf-8&q=java&callback=cb")
    br/>@GET("sug?code=utf-8&q=java&callback=cb")
    }

到此Retrofit2講解完畢。語言組織的不好,有什么問題大家可以留言,相互學習。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

名稱欄目:Retrofit2的使用-創(chuàng)新互聯(lián)
本文鏈接:http://aaarwkj.com/article48/cociep.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、ChatGPT、App開發(fā)定制網站、網站收錄、網頁設計公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網頁設計公司
禁区正片免费看完整国产 | 成熟女人毛茸茸的视频| 亚洲乱码国产乱码精品| 日韩一区二区三区不卡| 国产一区二区三区av网站| 91大神黑丝美女洗澡| 久久精品人妻少妇一区二区| av蜜臀一区二区三区| 亚洲巨人精品福利导航| 日韩欧美一区二区三级| 日韩中字伦理熟妇人妻| 欧美日韩男女性生活视频| 中文字幕中出亚洲精品| 日本免费中文字幕在线| 国产伦国产一区二区三区在线观看 | 麻豆午夜视频免费在线观看| 成人大片在线免费观看视频| 亚洲色图综合在线观看| 亚洲综合欧美自偷自拍| 加勒比视频在线观看一区| 丝袜美腿亚洲综合一区| 日韩欧美一区二区黄色| 免费观看亚洲视频一区二区三区| 亚洲伦理av在线观看| 日韩高清在线一区二区三区| 欧美亚洲清纯唯美另类| 亚洲国产精品成人女人| 97在线观看免费播放| 国内精品人妻在线中文字幕| 有码不卡中文字幕在线视频| 高级会所口爆视频在线播放视频| 粉嫩av蜜臀一区二区三区| 中文字幕国产精品欧美| 国模在线视频一区二区| 一区二区三区高清人妻日本| av大全网站免费一区二区| 欧美精品久久91九色| 成年午夜福利片在线观看| 黑人精品一区二区三区| 欧美大片免费在线播放| 一起草草视频在线观看|