- 原文鏈接: Integrate OkHttp3 as Network Stack
- 原文作者: Future Studio
- 譯文出自: 小鄧子的簡書
- 譯者: 小鄧子
- 狀態(tài): 完成
Jake Wharton的OkHttp3下載器
Jake Wharton已經(jīng)為Picasso發(fā)布了一個OkHttp3的下載器。它在OkHttp3的新架構(gòu)環(huán)境下,使其兼容至Picasso2的網(wǎng)絡(luò)實(shí)現(xiàn)。讓我們一起看看,并把它集成進(jìn)來吧。
幸運(yùn)的是,它提供了一個Gradle依賴。因此,你只需將下面這段個代碼添加至build.gradle
中,然后同步工程即可:
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
設(shè)置OkHttp 3作為Picasso的下載器
下一步要做的就是設(shè)置OkHttp 3作為Picasso的下載器。首先,創(chuàng)建OkHttp以及OkHttp 3的下載器:
okhttp3.OkHttpClient okHttp3Client = new okhttp3.OkHttpClient();
OkHttp3Downloader okHttp3Downloader = new OkHttp3Downloader(okHttp3Client);
其次,將這個下載器添加到Picasso實(shí)例中。我們使用Picasso.Builder
來自定義Picasso實(shí)例。如果你想了解Picasso.Builder
,可以翻閱之前的博客文章。
Picasso picasso = new Picasso.Builder(context)
.downloader(new CustomOkHttp3Downloader(client))
.build();
第三,也是最后一步,使用我們新創(chuàng)建的Picasso實(shí)例去加載圖像:
String internetUrl = "http://i.imgur.com/DvpvklR.png";
picasso
.with(context)
.load(internetUrl)
.into(imageView1);
就這樣,我們達(dá)成了目標(biāo),圖像將通過OkHttp 3加載。 \o/
設(shè)置全局Picasso實(shí)例的下載器
現(xiàn)在你可能會問,難道每一次都需要新建一個實(shí)例去加載圖像嗎?當(dāng)然不用,我們在之前介紹Picasso.Builder文章中介紹過,你可以設(shè)置一個全局的Picasso實(shí)例:
// set the global instance to use this Picasso object
// all following Picasso (with Picasso.with(Context context) requests will use this Picasso object
// you can only use the setSingletonInstance() method once!
try {
Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
// Picasso instance was already set
// cannot set it after Picasso.with(Context) was already in use
}
之后的所有請求,都會復(fù)用同一個Picasso實(shí)例。并且,整個應(yīng)用都會使用OkHttp 3加載圖像。
自定義OkHttp3Downloader
這個集成庫的核心僅有一個OkHttp3Downloader
類。它圍繞OkHttp 3實(shí)現(xiàn)。如果你不想像我們上面展示的那樣,添加gradle依賴,而且又不得不需要定制OkHttp 3的包裝類,你完全可以從Jake的倉庫中復(fù)制這個類。
假設(shè)你已經(jīng)自定義了CustomOkHttp3Downloader
類,實(shí)現(xiàn)了Downloader
接口,并遵循了最初的設(shè)計(jì)。你可以使用同樣的方式,添加它作為網(wǎng)絡(luò)加載棧:
okhttp3.OkHttpClient client = new okhttp3.OkHttpClient();
Picasso picasso = new Picasso.Builder(context)
.downloader(new CustomOkHttp3Downloader(client))
.build();
String internetUrl = "http://i.imgur.com/DvpvklR.png";
picasso
.with(context)
.load(internetUrl)
.into(imageView2);