Retrofitの理解まとめ

4110 ワード

Retrofit使用概要と蓄積
AndroidプロジェクトでRetrofitを使ってから2年近く経ちましたが、ずっとネットや会社の先輩の使い方に真似して、使うレベルだけを回っています.使い方をまとめたり、ソースコードを深く理解したりしていません.説明Retrofitのソースコードはしばらくはっきり言えないはずですが、ここではまずRetrofitの使い方をまとめ、同時に私のRetrofit自身に対する理解についても話します.もちろん多くの資料をめくってまとめて切り取ったものです.
Retrofitの理解
以前はRetrofitを使っていましたが、長い間何なのか分かりませんでした.最近、いくつかの資料をめくってまとめました.少なくとも何なのか分かりました.
Retrofitに少し詳しい兄弟は、RetrofitがOkHttpベースのRESTful APIリクエストツールであることを知っています.Retrofitネットワークアクセスフレームワークがリクエストに使用されるのは実際にはOkhttpであり、RetrofitはOkhttp上でカプセル化されているだけである.
RetrofitとOkhttpの連絡は、Retrofitを使用してAppでネットワーク要求を行う過程で、まずAppが要求を発行し、その後、Retrofitは要求パラメータ、Header、urlなどを注釈で構成し、OkHttpを通じてネットワーク要求をサーバに送信する.
以上のプロセスサーバが応答データを返すと、OkHttpはデータをRetrofitに渡し、アプリに直接データを渡し、ページデータのリフレッシュなどの操作を行うことができます.
RetrofitとOkhttpの違いOkHttpとRetrofitはネットワークオープンソースフレームワークですが、彼らの違いは何ですか?
  • Retrofitは主に応用レベルのパッケージを担当している.つまり、主に開発者向けで、要求パラメータ、応答データの処理、エラー処理など、使いやすい.OkHttpは主にsocket部分の最適化を担当し、例えば多重化、bufferキャッシュ、データ圧縮などである.
  • Retrofitは、特定の要求、スレッド切り替え、およびデータ変換をカプセル化している.OkHttpはHttpプロトコルに基づいてカプセル化された要求クライアントであり、スレッドを開くこともできますが、根本的にはHttpClient、HttpUrlConnectionの職責と同じです.

  • なぜokhttpを直接使わずにRetrofitを使うのですか?retrofitを使用するのは主に要求の生成を容易にするためであり、okhttp生成要求には大量の重複コードがあり、retrofitで注釈を使用すると要求を容易に定義し、自動的にこれらの重複要求コードを生成することができる.
    Retrofit理解総括retrofitはokhttpベースのネットワークアクセスフレームワークであり、ネットワーク要求は本質的にokhttpで完了し、retrofitはネットワーク要求インタフェースのパッケージのみを担当する.retrofitはリクエストインタフェースでリクエストパラメータ、Header、urlなどを注釈で構成し、Retrofitはネットワークリクエストアダプタと同様に、基本的なJavaインタフェースを動的エージェントでHTTPリクエストに翻訳し、okhttpでリクエストを送信する.
    Retrofit基本使用
    appの下のbuild.gradleに以下のライブラリを入れるとRetrofit.を使用できます.
    1、依存ライブラリの追加
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    2.ネットワーク要求を記述するためのインタフェースを作成する.
        @FormUrlEncoded
        @POST("user/edit.do")
        Observable editAvatar(@Field("userImg") String userImg);
    

    これは私のプロジェクトの要求インタフェースです.ここでインタフェースはObservableオブジェクトを返します.私はrxjavaと協力して使用しているので、rxjavaと協力しなければCallオブジェクトを返すべきです.この部分は後で話します.
    3、Retrofitインスタンスを作成する.
    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("")
                    .addConverterFactory(FastJsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .client(okHttpClient)
                    .build();
    

    4、ネットワーク要求インタフェースのインスタンスを作成する.ClientApiは私が作成したネットワークリクエストインタフェースです
    ClientApi clientApi = retrofit.create(ClientApi.class);
    

    5、送信要求(rxjavaベース)
     HttpManager.getInstance().getApi().editAvatar("")
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Action1() {
                @Override
                public void call(BaseResult baseResult) {
                    
                }
            });
    

    上記コードのHttpManager.getInstance().getApi()は、ネットワーク要求インタフェースの例である上記clientApiである.
    RetrofitのConverterとCallAdapter
    Converter
    Retrofitを使用すると要求インタフェースが作成され、内部のメソッドの戻り値はCallのフォーマットです.ここのTデフォルトはResponseBodyですが、Converterという機能を使って、返されたデータを私たちが望むように解析することができます.つまりConverterはCallでのTの変換に対して一般的にGsonConverterFactoryを使用しており、jsonに要求されると、RetrofitはGsonConverterを呼び出してjsonを必要なエンティティに変換します.GsonConverterを使用するにはライブラリを追加する必要があります
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    その後、Retrofitオブジェクトを作成するときに呼び出されます.
    .addConverterFactory(GsonConverterFactory.create())
    

    もちろんConverterはカスタマイズできます.
    CallAdapter
    ConverterはCallのTに対する変換であり、CallAdapterはCallに対して変換することができ、これによりCallのCallも置き換えることができ、戻り値のタイプは後続のプロセッサロジックを決定し、同様にRetrofitは複数のCallAdapterを提供します.最も人気のあるのはrxjavaです.使い方は以下の通りです.
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    retrofitインスタンスを作成するときに、ネットワーク要求を記述するインタフェースのメソッドの戻り値をObservableに変更する文を追加します.これによりrxjavaのチェーン構造を使用してネットワークにアクセスすることができます.
    以上は私のRetrofitに対するまとめですが、実は各道の大神のブログを参照して、これらの基礎的な知識点を一緒に置いて理解しやすいだけです.このブログではRetrofitの使用について詳しくは述べていませんが、注釈の使用などは一切触れていませんが、実は私が本編を書く目的は実際には使用上ではなく、主に前半の理解部分です.Retrofitを理解してほしいし、もちろん自分で調べるためにも便利です.