開始在Android上使用Retrofit并創(chuàng)建Http請(qǐng)求客戶端

什么是Retrofit

官方對(duì)Retrofit的定義是:一個(gè)在Android和Java中類型安全的REST客戶端
你可以使用注解去描述HTTP請(qǐng)求,URL 參數(shù)替換和查詢參數(shù)這些都默認(rèn)的得到完整的支持。此外,它還提供了自定義請(qǐng)求頭、多種類型請(qǐng)求體、文件上傳和下載、模擬相應(yīng)和其他更多的功能。接下來我們將會(huì)看到這些具體是實(shí)現(xiàn)詳細(xì)。

先準(zhǔn)備你的安卓項(xiàng)目

在android studio上用Gradle構(gòu)建你的新項(xiàng)目。當(dāng)然也可以選擇在IDE上用Maven構(gòu)建項(xiàng)目。

定義依賴庫:Gradle or Maven

首先你的項(xiàng)目需要依賴Retrofit。在你所選的編譯系統(tǒng)中,在文件build.gradle 或 pom.xml 中導(dǎo)入你所以依賴的指定Retrofit版本,當(dāng)運(yùn)行去編譯代碼的時(shí)候,這個(gè)編譯系統(tǒng)會(huì)下載和提供制定的依賴庫到你的項(xiàng)目中。

Retrofit2

build.gradle

dependencies {  
    // Retrofit & OkHttp
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
}```

##Android網(wǎng)絡(luò)權(quán)限
用Retrofit進(jìn)行網(wǎng)絡(luò)請(qǐng)求需要在AndroidManifest.xml中添加網(wǎng)絡(luò)權(quán)限
```Java
<uses-permission android:name="android.permission.INTERNET" />  ```

##如何描述API端點(diǎn)
首先你需要定義接口和對(duì)應(yīng)的請(qǐng)求方法

##GitHub Client
以下demo定義了GitHubClient接口和reposForUser方法去請(qǐng)求一組倉庫貢獻(xiàn)者列表數(shù)據(jù)。其中@GET注解描述了這個(gè)請(qǐng)求用了HTTP GET方法。這段demo也闡明了Retrofit路徑參數(shù)替換的功能用法。這個(gè)定義的方法中的{user}路徑將會(huì)被調(diào)用reposForUser方法中的變量值所替換。
```Java
public interface GitHubClient {  
    @GET("/users/{user}/repos")
    Call<List<GitHubRepo>> reposForUser(
        @Path("user") String user
    );
}```
GitHubRepo類定義。這個(gè)類包含的必須屬性和響應(yīng)數(shù)據(jù)一一對(duì)應(yīng)。
```Java
public class GitHubRepo {  
    private int id;
    private String name;

    public GitHubRepo() {
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}```

關(guān)于先前提到的JSON映射:GitHubClient接口定義的返回類型為List<GitHubRepo>的方法。Retrofit 可以確保服務(wù)器響應(yīng)
的數(shù)據(jù)映射的正確性。(就是返回的響應(yīng)數(shù)據(jù)會(huì)和被給的類GitHubRepo的數(shù)據(jù)相對(duì)應(yīng))
##Retrofit REST 客戶端
描述完了API接口和對(duì)象模型之后,我們就可以進(jìn)行真正的請(qǐng)求了。Retrofit的所有請(qǐng)求都是基于1.9或2.0+版本。這兩個(gè)版本你都可以很流暢的創(chuàng)建和配置API。最后,你可以使用builder來對(duì)所有請(qǐng)求設(shè)置一些設(shè)置一些常用的選項(xiàng),比如:url或者轉(zhuǎn)換器。

####Retrofit 2
```Java
String API_BASE_URL = "https://api.github.com/";

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

Retrofit.Builder builder =  
    new Retrofit.Builder()
            .baseUrl(API_BASE_URL)
            .addConverterFactory(
                GsonConverterFactory.create()
            );

Retrofit retrofit =  
    builder
        .client(
            httpClient.build()
        )
        .build();

GitHubClient client =  retrofit.create(GitHubClient.class); 
}```
上面的demo片段使用了最簡(jiǎn)單的設(shè)置選項(xiàng),還有更多的設(shè)置選項(xiàng)讓你去控制請(qǐng)求。但是這已經(jīng)足夠我們用來作為第一個(gè)請(qǐng)求的列子了。
##JSON 映射
大多數(shù)情況下,請(qǐng)求服務(wù)器和服務(wù)器響應(yīng)返回?cái)?shù)據(jù),都不是用java對(duì)象。更多的是用像JSON這種格式的語言來傳。
當(dāng)使用Retrofit 2,你需要向Retrofit對(duì)象添加一個(gè)轉(zhuǎn)換器,將返回的JSON數(shù)據(jù)轉(zhuǎn)成對(duì)應(yīng)給的類對(duì)象。在build.gradle文件中添加一行下面這個(gè)代碼,引進(jìn)Gson轉(zhuǎn)換器給Retrofit 2用。
```Java
compile 'com.squareup.retrofit2:converter-gson:2.1.0'```
當(dāng)然你也用轉(zhuǎn)換器來轉(zhuǎn)換xml等其他格式的數(shù)據(jù),請(qǐng)參考:
[轉(zhuǎn)換器轉(zhuǎn)換其他格式](https://futurestud.io/tutorials/retrofit-2-introduction-to-multiple-converters "")
##Retrofit 的使用
在大量的準(zhǔn)備工作之后,現(xiàn)在可以很簡(jiǎn)便的請(qǐng)求。只用幾行demo就可以進(jìn)行請(qǐng)求
#### Retrofit 2
使用client去獲取call對(duì)象。只要你用獲取的call對(duì)象調(diào)用.enqueue,請(qǐng)求將會(huì)被Retrofit處理。
```Java
// Create a very simple REST adapter which points the GitHub API endpoint.
GitHubClient client =  retrofit.create(GitHubClient.class);

// Fetch a list of the Github repositories.
Call<List<GitHubRepo>> call =  
    client.reposForUser("fs-opensource");

// Execute the call asynchronously. Get a positive or negative callback.
call.enqueue(new Callback<List<GitHubRepo>>() {  
    @Override
    public void onResponse(Call<List<GitHubRepo>> call, Response<List<GitHubRepo>> response) {
        // The network call was a success and we got a response
        // TODO: use the repository list and display it
    }

    @Override
    public void onFailure(Call<List<GitHubRepo>> call, Throwable t) {
        // the network call was a failure
        // TODO: handle error
    }
});```
當(dāng)調(diào)用成功之后,Retrofit 會(huì)返回一個(gè)方便的List<GitHubRepo>,你可以使用它顯示在你的app上。
譯至:
[https://futurestud.io/tutorials/retrofit-getting-started-and-android-client](https://futurestud.io/tutorials/retrofit-getting-started-and-android-client"")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容