- 原文鏈接: Integrate OkHttp3 as Network Stack
- 原文作者: Future Studio
- 譯文出自: 小鄧子的簡(jiǎn)書
- 譯者: 小鄧子
- 狀態(tài): 完成
Jake Wharton的OkHttp3下載器
Jake Wharton已經(jīng)為Picasso發(fā)布了一個(gè)OkHttp3的下載器旺韭。它在OkHttp3的新架構(gòu)環(huán)境下纯命,使其兼容至Picasso2的網(wǎng)絡(luò)實(shí)現(xiàn)。讓我們一起看看蟀俊,并把它集成進(jìn)來吧灵寺。
幸運(yùn)的是诫尽,它提供了一個(gè)Gradle依賴。因此,你只需將下面這段個(gè)代碼添加至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);
其次检吆,將這個(gè)下載器添加到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)在你可能會(huì)問掏缎,難道每一次都需要新建一個(gè)實(shí)例去加載圖像嗎?當(dāng)然不用煤杀,我們?cè)谥敖榻BPicasso.Builder文章中介紹過眷蜈,你可以設(shè)置一個(gè)全局的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
}
之后的所有請(qǐng)求,都會(huì)復(fù)用同一個(gè)Picasso實(shí)例怜珍。并且端蛆,整個(gè)應(yīng)用都會(huì)使用OkHttp 3加載圖像。
自定義OkHttp3Downloader
這個(gè)集成庫(kù)的核心僅有一個(gè)OkHttp3Downloader
類酥泛。它圍繞OkHttp 3實(shí)現(xiàn)今豆。如果你不想像我們上面展示的那樣,添加gradle依賴柔袁,而且又不得不需要定制OkHttp 3的包裝類呆躲,你完全可以從Jake的倉(cāng)庫(kù)中復(fù)制這個(gè)類。
假設(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);