流行網(wǎng)絡(luò)框架okHttp的使用

引用項(xiàng)目地址:https://github.com/hongyangAndroid/okhttputils

okhttp-utils是對(duì)okhttp的小小封裝,使得使用更加方便古话,對(duì)應(yīng)的okhttp版本是3.3.1

用法

Android Studio

compile 'com.zhy:okhttputils:2.6.2'

對(duì)其進(jìn)行的封裝有:

一般的get請(qǐng)求
一般的post請(qǐng)求
基于Http Post的文件上傳(類(lèi)似表單)
文件下載/加載圖片
上傳下載的進(jìn)度回調(diào)
支持取消某個(gè)請(qǐng)求
支持自定義Callback
支持HEAD歧杏、DELETE测垛、PATCH混卵、PUT
支持session的保持
支持自簽名網(wǎng)站https的訪問(wèn)入撒,提供方法設(shè)置下證書(shū)就行

配置OkHttpClient

默認(rèn)情況下疙剑,將直接使用okhttp默認(rèn)的配置生成OkhttpClient戒突,如果你有任何配置屯碴,記得在Application中調(diào)用initClient方法進(jìn)行設(shè)置。

public class BaseApplication extends Application{
    private static BaseApplication application;
    public static BaseApplication getInstance(){
        return application;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
//                .addInterceptor(new LoggerInterceptor("TAG"))
                .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                .readTimeout(10000L, TimeUnit.MILLISECONDS)
                //其他配置
                .build();
        OkHttpUtils.initClient(okHttpClient);

    }
}

用法實(shí)例:

Get請(qǐng)求

    OkHttpUtils
            .get()
            .url(url)
    .addParams("username", "WentGone")
    .addParams("password", "123")
    .build()
    .execute(new StringCallback()
    {
        @Override
        public void onError(Request request, Exception e)
        {

        }

        @Override
        public void onResponse(String response)
        {

        }
    });

Post請(qǐng)求

 OkHttpUtils.post()
            .url(url)
    .addParams("username", "WentGone")
    .addParams("password", "123")
    .build()
    .execute(callback);

PostString請(qǐng)求

OkHttpUtils.postString()
            .url(url)
    .content(new Gson().toJson(new User("WentGone", "123")))
            .build()
    .execute(new MyStringCallback());

提交一個(gè)Gson字符串到服務(wù)器端膊存。

PostFile請(qǐng)求

OkHttpUtils.postFile()
            .url(url)
    .file(file)
    .build()
    .execute(new MyStringCallback());

將文件作為請(qǐng)求體导而,發(fā)送到服務(wù)器。

Post表單形式上傳文件

 OkHttpUtils.post()//
            .addFile("mFile", "msg1.png", file)//
    .addFile("mFile", "test1.txt", file2)//
    .url(url)
    .params(params)//
    .headers(headers)//
    .build()//
    .execute(new MyStringCallback());

支持單個(gè)多個(gè)文件隔崎,addFile的第一個(gè)參數(shù)為文件的key今艺,即類(lèi)別表單中<input type="file" name="mFile"/>的name屬性。

自定義CallBack

目前內(nèi)部包含StringCallBack,FileCallBack,BitmapCallback爵卒,可以根據(jù)自己的需求去自定義Callback虚缎,例如希望回調(diào)User對(duì)象:

   OkHttpUtils.get()//
            .url(url)//
    .addParams("username", "WentGone")//
    .addParams("password", "123")//
    .build()//
    .execute(new UserCallback()
    {
        @Override
        public void onError(Request request, Exception e)
        {
            mTv.setText("onError:" + e.getMessage());
        }

        @Override
        public void onResponse(User response)
        {
            mTv.setText("onResponse:" + response.username);
        }
    });

下載文件

  OkHttpUtils.get()
             .url(url)
             .build()
             .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")//
    {
        @Override
        public void inProgress(float progress)
        {
            mProgressBar.setProgress((int) (100 * progress));
        }

        @Override
        public void onError(Request request, Exception e)
        {
            Log.e(TAG, "onError :" + e.getMessage());
        }

        @Override
        public void onResponse(File file)
        {
            Log.e(TAG, "onResponse :" + file.getAbsolutePath());
        }
    });

注意下載文件可以使用FileCallback,需要傳入文件需要保存的文件夾以及文件名钓株。

顯示圖片

  OkHttpUtils.get()
             .url(url)
             .build()
             .execute(new BitmapCallback()
    {
        @Override
        public void onError(Request request, Exception e)
        {
            mTv.setText("onError:" + e.getMessage());
        }

        @Override
        public void onResponse(Bitmap bitmap)
        {
            mImageView.setImageBitmap(bitmap);
        }
    });

顯示圖片实牡,回調(diào)傳入BitmapCallback即可。

上傳下載的進(jìn)度顯示

new Callback<T>()
    {
        //...
        @Override
        public void inProgress(float progress)
        {
            //use progress: 0 ~ 1
        }
    }

callback回調(diào)中有inProgress方法轴合,直接復(fù)寫(xiě)即可创坞。

同步的請(qǐng)求

Response response = OkHttpUtils.get()
            .url(url)
            .tag(this)
            .build()
            .execute();

execute方法不傳入callback即為同步的請(qǐng)求,返回Response值桩。

取消單個(gè)請(qǐng)求

RequestCall call = OkHttpUtils.get().url(url).build(); 
call.cancel();

根據(jù)tag取消請(qǐng)求

目前對(duì)于支持的方法都添加了最后一個(gè)參數(shù)Object tag摆霉,取消則通過(guò)OkHttpUtils.cancelTag(tag)執(zhí)行。
例如:在Activity中奔坟,當(dāng)Activity銷(xiāo)毀取消請(qǐng)求:

OkHttpUtils.get()
    .url(url)
    .tag(this)
    .build()

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        //可以取消同一個(gè)tag的
        OkHttpUtils.cancelTag(this);//取消以Activity.this作為tag的請(qǐng)求
    }

比如,當(dāng)前Activity頁(yè)面所有的請(qǐng)求以Activity對(duì)象作為tag搭盾,可以在onDestory里面統(tǒng)一取消咳秉。

混淆

#okhttputils
-dontwarn com.zhy.http.**
-keep class com.zhy.http.**{*;}


#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}


#okio
-dontwarn okio.**
-keep class okio.**{*;}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸯隅,隨后出現(xiàn)的幾起案子澜建,更是在濱河造成了極大的恐慌向挖,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕舵,死亡現(xiàn)場(chǎng)離奇詭異何之,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)咽筋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)溶推,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奸攻,你說(shuō)我怎么就攤上這事蒜危。” “怎么了睹耐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵辐赞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我硝训,道長(zhǎng)响委,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任窖梁,我火速辦了婚禮赘风,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窄绒。我一直安慰自己贝次,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布彰导。 她就那樣靜靜地躺著蛔翅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪位谋。 梳的紋絲不亂的頭發(fā)上山析,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音掏父,去河邊找鬼笋轨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赊淑,可吹牛的內(nèi)容都是我干的爵政。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陶缺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钾挟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起饱岸,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掺出,失蹤者是張志新(化名)和其女友劉穎徽千,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汤锨,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡双抽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闲礼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牍汹。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖位仁,靈堂內(nèi)的尸體忽然破棺而出柑贞,到底是詐尸還是另有隱情,我是刑警寧澤聂抢,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布钧嘶,位于F島的核電站,受9級(jí)特大地震影響琳疏,放射性物質(zhì)發(fā)生泄漏有决。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一空盼、第九天 我趴在偏房一處隱蔽的房頂上張望书幕。 院中可真熱鬧,春花似錦揽趾、人聲如沸台汇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苟呐。三九已至,卻和暖如春俐筋,著一層夾襖步出監(jiān)牢的瞬間牵素,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工澄者, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笆呆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓粱挡,卻偏偏與公主長(zhǎng)得像赠幕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子询筏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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