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