前言
本人第一篇正經(jīng)文章(不正經(jīng)的文章沒有發(fā)表出去)抄瑟,
本文中的Retrofit均指代Retrofit2.0空扎。
任務(wù):簡單使用Retrofit2
Retrofit 是什么?
Retrofit 是一個用于 Android 和 Java 平臺的類型安全的網(wǎng)絡(luò)請求框架貌虾。Retrofit2底層基于OkHttp實現(xiàn)的吞加,OkHttp現(xiàn)在已經(jīng)得到Google官方認可,你看人家的產(chǎn)品(想想就開心)。
Retrofit在github上的地址:https://github.com/square/retrofit
先來點開胃小菜尽狠,提提神衔憨。上代碼,
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
上面的代碼就是Retrofit官網(wǎng)上面的源代碼袄膏,如果照著源代碼寫就會出現(xiàn)Repo是干嘛的践图,一臉蒙蔽了。為了保持清醒上兩張圖沉馆。
點擊retrofit-adapters進入的頁面是長得如下:
點擊retrofit-converters進入的頁面是長得如下:
上面出問題的Repo就是和converters有關(guān)系了码党。那么我們來科普一下。
retrofit-adapters表示retrofit支持的適配器斥黑,舉個例子想要支持RxJava就需要在代碼中添加:<font color=red>addCallAdapterFactory(RxJavaCallAdapterFactory.create())</font>揖盘。此處只是預(yù)熱一下。后面我們會說到锌奴。
retrofit-converters從字面意思就看的出來轉(zhuǎn)換器兽狭。沒錯就是它,
這個強大的庫可以很簡單的把返回的 JSON 或者 XML 數(shù)據(jù)解析成簡單 Java 對象。GET, POST, PUT, PATCH, 和 DELETE 這些請求都可以執(zhí)行箕慧。
對比上面的圖片可以看到服球,JSON轉(zhuǎn)換器是:Gson,Jackson颠焦,Moshi
對于 Protocol Buffers, 轉(zhuǎn)換器是:Protobuf斩熊,Wire
對于 XML 解析, 轉(zhuǎn)換器是:simplexml
對于 text/plain 解析,轉(zhuǎn)行器是:scalars
那么上面的Repo就是java對象自己定義的對象伐庭。
1.創(chuàng)建一個 Android Studio 工程
打開 Android Studio粉渠,創(chuàng)建一個新工程(直接創(chuàng)建一個新的Module也是一樣),然后創(chuàng)建一個命名為 MainActivity 的空白 Activity似忧。
2.添加依賴庫
創(chuàng)建好新的工程后渣叛,在我們的build.gradle(不是整個工程下的)中添加以下依賴。
//Retrofit
compile 'com.squareup.retrofit2:retrofit:2.2.0'
//Retrofit對應(yīng)json的轉(zhuǎn)換庫
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
3.添加網(wǎng)絡(luò)權(quán)限
我們做的是網(wǎng)絡(luò)請求盯捌,當(dāng)然要有訪問網(wǎng)絡(luò)的權(quán)限。在我們應(yīng)用的清單文件 AndroidManifest.xml 里面聲明網(wǎng)絡(luò)權(quán)限蘑秽。
<uses-permission android:name="android.permission.INTERNET"/>
4.創(chuàng)建 API 接口
我們使用https://api.github.com/repos/square/retrofit/contributors 這個地址饺著。新建一個APIGitHub類。我們使用的是ResponseBody肠牲,這是okhttp3里面的類幼衰,因為Retrofit2里面自動設(shè)置了okhttp的依賴,所以我們可以直接用缀雳。
public interface APIGitHub {
@GET("repos/square/retrofit/contributors")
Call<ResponseBody> getData();
}
GET 注解明確的定義了當(dāng)該方法調(diào)用的時候會執(zhí)行一個 GET 請求渡嚣。接口里每一個方法都必須有一個 HTTP 注解,用于提供請求方法和相對的 URL肥印。Retrofit 內(nèi)置了 5 種注解:@GET, @POST, @PUT, @DELETE, 和 @HEAD识椰。后面我們會講到。
5.在我們的MainActivity中請求網(wǎng)絡(luò)
直接上代碼深碱。
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
APIGitHub apiGitHub = retrofit.create(APIGitHub.class);
apiGitHub.getData().enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
String sting = null;
try {
sting = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
Log.e(TAG, "獲得信息" + sting);
} else {
Log.e(TAG, "獲得信息錯誤");
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e(TAG, "獲得信息直接獲得錯誤+" + t.toString());
}
});
}
現(xiàn)在我們就得到具體的信息了腹鹉。
以上就是簡單的使用。然后發(fā)現(xiàn)現(xiàn)在的網(wǎng)絡(luò)特別不好使敷硅,嗨這不是打消我的積極性么功咒??绞蹦?力奋?。下一篇我們分析Retrofit詳細的使用和轉(zhuǎn)換器的使用幽七。景殷。請期待哦!!