Retrofit 進階篇 自定義轉(zhuǎn)換器

1 想必各位android 開發(fā)人員 已經(jīng)對retrofit+rxjava +okhttp 都有所了解 就算是大家沒應(yīng)用 也有所耳聞了 因為本人現(xiàn)在正在寫一個新的工程 正在嘗試著使用 這個很高大上的框架 這這里給大家介紹一下 所遇到的問題 已經(jīng)新知識

基本創(chuàng)建 但是這對于我們一些應(yīng)用 需要參數(shù)加密 數(shù)據(jù)解密的開發(fā)者來講 這樣基本的創(chuàng)建是不足夠的 那么follow me

   retrofit = new Retrofit.Builder()
                    .client(HttpConnection.getInstance())
                    .addConverterFactory(GsonConverterFactory.create())//轉(zhuǎn)換器
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //添加 RxJava 適配器
                    .baseUrl(Contacts.BASE_URL)
                    .build();

2 .自定義轉(zhuǎn)換器

  • 繼承Converter.Factory
public final class DecodeConverterFactory extends Converter.Factory {

    public static DecodeConverterFactory create() {
        return create(new Gson());
    }

    public static DecodeConverterFactory create(Gson gson) {
        return new DecodeConverterFactory(gson);
    }

    private final Gson gson;

    private DecodeConverterFactory(Gson gson) {
        if (gson == null) throw new NullPointerException("gson == null");
        this.gson = gson;
    }

    @Override
    public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        return new DecodeRequestBodyConverter<>(gson, adapter);
    }

    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        return new DecodeResponseBodyConverter<>(adapter);
    }
}
  • 分別實現(xiàn)request,response轉(zhuǎn)換器
public class DecodeRequestBodyConverter<T> implements Converter<T, RequestBody> {
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
    private static final Charset UTF_8 = Charset.forName("UTF-8");

    private final Gson gson;
    private final TypeAdapter<T> adapter;
    DecodeRequestBodyConverter(Gson gson,TypeAdapter<T> adapter){
        this.gson = gson;
        this.adapter = adapter;
    }
    @Override
    public RequestBody convert(T value) throws IOException {
        Buffer buffer = new Buffer();
        Writer writer = new OutputStreamWriter(buffer.outputStream(),UTF_8);
        JsonWriter jsonWriter = gson.newJsonWriter(writer);
        adapter.write(jsonWriter,value);
        jsonWriter.flush();
        byte[] bytes=buffer.readByteArray();
        try{
            bytes=GzipUtil.compress(bytes);
        }catch(Exception e){
            e.printStackTrace();
        }

        bytes=new TripleDES (Contacts.PARAMETER_ENCRYPTION_KEY).encryptionByteData(bytes);
        return RequestBody.create(MEDIA_TYPE,bytes);
    }
}
public class DecodeResponseBodyConverter<T> implements Converter<ResponseBody, T> {
    private final TypeAdapter<T> adapter;

    DecodeResponseBodyConverter(TypeAdapter<T> adapter) {
        this.adapter = adapter;
    }

    @Override
    public T convert(ResponseBody value) throws IOException {

        byte[] bytes = value.bytes();
        //先解密 在解壓
        try {
            bytes=  GzipUtil.unZip(new TripleDES(Contacts.BODY_ENCRYPTION_KEY).decryptionByteData(bytes));
        } catch (Exception e) {
            e.printStackTrace();

        }
        LogUtils.d(new String(bytes,"UTF-8"));

        //解密字符串
        return bytes==null?null:adapter.fromJson(new String(bytes,"UTF-8"));
    }
}
  • retrofit的配置


    對就是自定義的轉(zhuǎn)換器的名稱.png
  • 接下來 說說我遇到的問題 我定義了自定義轉(zhuǎn)換器之后 發(fā)現(xiàn) 只是走解密 加密卻怎么都不走 自己一律了半天 才發(fā)現(xiàn) 自己的post 請求 標(biāo)簽 竟然寫成了@ Query 我忍不了自己了 這么二 竟然 這里要很注意的 @Body 這個標(biāo)簽
@POST("check")
    Observable<DataVo<MessageVo,Object>> getTopMovie(@Body EquipmentParam equipment);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盛正,老刑警劉巖贮缕,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件识埋,死亡現(xiàn)場離奇詭異绑嘹,居然都是意外死亡,警方通過查閱死者的電腦和手機疾呻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來写半,“玉大人岸蜗,你說我怎么就攤上這事〉” “怎么了璃岳?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我矾睦,道長晦款,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任枚冗,我火速辦了婚禮缓溅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赁温。我一直安慰自己坛怪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布股囊。 她就那樣靜靜地躺著袜匿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稚疹。 梳的紋絲不亂的頭發(fā)上居灯,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機與錄音内狗,去河邊找鬼怪嫌。 笑死,一個胖子當(dāng)著我的面吹牛柳沙,可吹牛的內(nèi)容都是我干的岩灭。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼赂鲤,長吁一口氣:“原來是場噩夢啊……” “哼噪径!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起数初,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤找爱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妙真,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴允,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年珍德,在試婚紗的時候發(fā)現(xiàn)自己被綠了练般。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡锈候,死狀恐怖薄料,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泵琳,我是刑警寧澤摄职,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布誊役,位于F島的核電站,受9級特大地震影響谷市,放射性物質(zhì)發(fā)生泄漏蛔垢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一迫悠、第九天 我趴在偏房一處隱蔽的房頂上張望鹏漆。 院中可真熱鬧,春花似錦创泄、人聲如沸艺玲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭聚。三九已至,卻和暖如春搁拙,著一層夾襖步出監(jiān)牢的瞬間秒梳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工箕速, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留端幼,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓弧满,卻偏偏與公主長得像,于是被迫代替她去往敵國和親此熬。 傳聞我的和親對象是個殘疾皇子庭呜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

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

  • 本文將順著構(gòu)建請求對象->構(gòu)建請求接口->發(fā)起同步/異步請求的流程,分析Retrofit是如何實現(xiàn)的犀忱。 開始之前募谎,...
    zhuhf閱讀 1,622評論 0 10
  • 介紹 Retrofit 默認(rèn)提供了gson和Jackson對應(yīng)的converter,但是并沒有提供fastjson...
    我是腿哥閱讀 5,638評論 0 2
  • 簡介 剛接觸Retrofit的時候,就寫了一篇簡單的使用介紹:Retrofit 2.0基本使用方法,算是對Retr...
    Whyn閱讀 2,851評論 4 24
  • 安卓開發(fā)領(lǐng)域中阴汇,很多重要的問題都有很好的開源解決方案数冬,例如Square公司提供網(wǎng)絡(luò)請求 OkHttp , Retr...
    aaron688閱讀 1,919評論 1 20
  • 1.1 setNeedsDisplay&& setNeedsLayout介紹 1.2 綜上所述 綜上所訴,setN...
    smkoc閱讀 266評論 0 0