初認識Retrofit 2——Retrofitの構成と基本的な使用
6273 ワード
本稿では,Retrofit 2というネットワークフレームワークを初心者に紹介することを目的とする.RetrofitとRetrofit 2の間のApiの変更は大きく、現在のRetrofitに関する文章の多くは以前のバージョンのapiを紹介している.そこでこの文章は運に応じて生まれた.この文書では、次のことがわかります. Retrofitの使用に必要な依存 最新依存Jarファイル取得方法(search.maven.org) RetrofitによるHttp要求 Retrofit注釈Apiの簡単な紹介 Retrofit依存構成
Retrofitを使用するには、次のような構成が必要です.
GRADLE:
Retrofit:基本的な依存は、このネットワークリクエストフレームワークを使用するには、この依存を追加します.okhttp:Retrofitの下位ネットワークアクセスは使用するokhttpなので、これも追加しなければなりません.okio:これはokhttpで使用される依存ライブラリgson:Retrofitシーケンス化と逆シーケンス化で使用されるライブラリ(置換可能)converter-gson:gsonに対応してRetrofitを初期化するための(置換可能)
ヒント:Retrofit、Volleyなどは、具体的なリクエスト、スレッド切り替え、データ変換をカプセル化したネットワークフレームワークです.一方、okhttpはhttpリクエストに基づくクライアントであり、okhttpの役割はHttpClient、HttpUrlConnectionと同じである.
最新の依存jarファイルの取得方法
私たちはこのサイトを通じて:http://search.maven.org検索を行い、検索結果から最新のjarファイルを取得できます.理論的にはすべてのオープンソースフレームワークがここで見つけることができます.
RetrofitによるHttpリクエスト
「A type-safe REST client for Android and Java」は、Retrofitの公式サイトで紹介されています.Retrofitの主なターゲットはREST APIですが、REST APIが何なのかまだ分からない場合は、まず理解しておきましょう.
ここでは、以下のケースを完了するために、翻訳されたApiを使用します.次のプレゼンテーションの例を試してみたいなら、自分で通訳のkeyを申請する必要があります.
RetrofitはあなたのHttpリクエストをjavaインタフェースに変換します
このインタフェースを簡単に分析します:@GET("..."):この注釈が表す意味はGetリクエストであり,Postリクエストを行う場合はGETをPostに変更するだけである:@POst("…")である.翻訳されたapiはPostリクエストをサポートしていません.@Query("...") : 要求パラメータを追加します.パラメータ名はコメントの内容で、パラメータ値は入力されたパラメータ値です.簡単な例では、wordsの値が「retrofit」に入力されると、最下位で要求されたUrlは次のようになります.http://......&version=1.1&q=retrofit
RetrofitはTranslateServiceの実装クラスを自動的に生成します
TranslateServiceが作成した各Callは、同期または非同期のHttp要求を生成してリモート・サーバにアクセスできます.
RetrofitコメントApiの簡単な紹介
注記インタフェースのメソッドおよびパラメータの役割は、Httpリクエストがどのように処理されるかを示すことです.
1.要求方法
各関数は、要求メソッドおよび関連URLを指定できるHTTPコメントを指定する必要があります.ここには、GET、POST、PUT、DELETE、HEADの5つの内蔵コメントがあります.関連するURLリソースはコメントに定義されています.
URLに要求パラメータを指定することもできます
2.URL処理
1つの要求URLは、置換可能な領域と関数内のパラメータを使用して動的に更新することができる.置換可能な領域とは、
クエリー・パラメータを追加することもできます
複数のクエリー・パラメータは、1つの
3.要求体
1つのオブジェクトは、
このオブジェクトは、Retrofitのインスタンスで指定された変換器によって変換されます.Retrofitインスタンスにコンバータが追加されていない場合、
4.エンコードおよびその他
関数は、コード化されたフォームと複数の部分に送信されたデータを宣言することもできます.
関数の前に
複数のリクエスト・セクションでは、Retrofitの変換器の1つを使用するか、RequestBodyが独自のシーケンス化方法を処理することを実装します.
5.ヘッダーの処理
@Headersアノテーションを使用して静的ヘッダメソッドを設定できます
注意:リクエストヘッダは互いに上書きされず、同じ名前のリクエストヘッダはすべてリクエスト全体に含まれます.
1つの要求ヘッダは、注釈
各リクエストに複数のリクエストヘッダを追加する必要がある場合はOkHttpブロッキングを使用します
6.同期vs非同期
もっと勉強したいですか.
Retrofit公式サイトの紹介を読むことをお勧めします.Retrofit 2でHTTPリクエストRest Apiの紹介を簡略化します.
Retrofitを使用するには、次のような構成が必要です.
GRADLE:
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.8.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
Retrofit:基本的な依存は、このネットワークリクエストフレームワークを使用するには、この依存を追加します.okhttp:Retrofitの下位ネットワークアクセスは使用するokhttpなので、これも追加しなければなりません.okio:これはokhttpで使用される依存ライブラリgson:Retrofitシーケンス化と逆シーケンス化で使用されるライブラリ(置換可能)converter-gson:gsonに対応してRetrofitを初期化するための(置換可能)
ヒント:Retrofit、Volleyなどは、具体的なリクエスト、スレッド切り替え、データ変換をカプセル化したネットワークフレームワークです.一方、okhttpはhttpリクエストに基づくクライアントであり、okhttpの役割はHttpClient、HttpUrlConnectionと同じである.
最新の依存jarファイルの取得方法
私たちはこのサイトを通じて:http://search.maven.org検索を行い、検索結果から最新のjarファイルを取得できます.理論的にはすべてのオープンソースフレームワークがここで見つけることができます.
RetrofitによるHttpリクエスト
「A type-safe REST client for Android and Java」は、Retrofitの公式サイトで紹介されています.Retrofitの主なターゲットはREST APIですが、REST APIが何なのかまだ分からない場合は、まず理解しておきましょう.
ここでは、以下のケースを完了するために、翻訳されたApiを使用します.次のプレゼンテーションの例を試してみたいなら、自分で通訳のkeyを申請する必要があります.
RetrofitはあなたのHttpリクエストをjavaインタフェースに変換します
public interface TranslateService {
@GET("openapi.do?keyfrom=&key=&type=data&doctype=json&version=1.1")
Call listString(@Query("q") String words);
}
このインタフェースを簡単に分析します:@GET("..."):この注釈が表す意味はGetリクエストであり,Postリクエストを行う場合はGETをPostに変更するだけである:@POst("…")である.翻訳されたapiはPostリクエストをサポートしていません.@Query("...") : 要求パラメータを追加します.パラメータ名はコメントの内容で、パラメータ値は入力されたパラメータ値です.簡単な例では、wordsの値が「retrofit」に入力されると、最下位で要求されたUrlは次のようになります.http://......&version=1.1&q=retrofit
RetrofitはTranslateServiceの実装クラスを自動的に生成します
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fanyi.youdao.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
TranslateService service = retrofit.create(TranslateService.class);
TranslateServiceが作成した各Callは、同期または非同期のHttp要求を生成してリモート・サーバにアクセスできます.
//
Response response = translateCall.execute();
Translate translate = response.body();
System.out.println(translate.getTranslation().get(0));
//
translateCall.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Translate translate = response.body();
System.out.println(translate.getTranslation().get(0));
}
@Override
public void onFailure(Call call, Throwable throwable) {
}
});
RetrofitコメントApiの簡単な紹介
注記インタフェースのメソッドおよびパラメータの役割は、Httpリクエストがどのように処理されるかを示すことです.
1.要求方法
各関数は、要求メソッドおよび関連URLを指定できるHTTPコメントを指定する必要があります.ここには、GET、POST、PUT、DELETE、HEADの5つの内蔵コメントがあります.関連するURLリソースはコメントに定義されています.
@GET("users/list")
URLに要求パラメータを指定することもできます
@GET("users/list?srot=desc")
2.URL処理
1つの要求URLは、置換可能な領域と関数内のパラメータを使用して動的に更新することができる.置換可能な領域とは、
{
および}
に包まれたアルファベットからなる文字列を指す.対応するパラメータは、@Pathコメントで同じ文字列でなければなりません.@GET("group/{id}/users")
Call> groupList(@Path("id") int groupId);
クエリー・パラメータを追加することもできます
@GET("group/{id}/users")
Call> groupList(@Path("id") int groupId, @Query("sort") String sort);
複数のクエリー・パラメータは、1つの
Map
を構成して使用できます.@GET("group/{id}/users")
Call> groupList(@Path("id") int groupId, @QueryMap map options);
3.要求体
1つのオブジェクトは、
@Body
注釈を使用して、自分がHTTPリクエストのリクエストボディであることを指定することができる.@Post("users/new")
Call createUser(@Body User user);
このオブジェクトは、Retrofitのインスタンスで指定された変換器によって変換されます.Retrofitインスタンスにコンバータが追加されていない場合、
RequestBody
のみが使用可能である4.エンコードおよびその他
関数は、コード化されたフォームと複数の部分に送信されたデータを宣言することもできます.
@FormUrlEncoded
が1つの関数の前にある場合、符号化されたフォームデータが送信される.各キー値ペアは、@Field
注釈によって、名前およびオブジェクトが提供する値を含む.@FormUrlEncoded
@POST("user/edit")
Call updateUser(@Field("first_name") String first, @Field("last_name") String last);
関数の前に
@Multipart
がある場合、複数の部分要求が使用されます.各セクションは、宣言時に@Part
タグを使用します.@Multipart
@PUT("user/photo")
Call updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
複数のリクエスト・セクションでは、Retrofitの変換器の1つを使用するか、RequestBodyが独自のシーケンス化方法を処理することを実装します.
5.ヘッダーの処理
@Headersアノテーションを使用して静的ヘッダメソッドを設定できます
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call> widgetList();
@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call getUser(@Path("username") String username);
注意:リクエストヘッダは互いに上書きされず、同じ名前のリクエストヘッダはすべてリクエスト全体に含まれます.
1つの要求ヘッダは、注釈
@Header
を使用して動的に更新することができる.対応するパラメータは@Header
に提供されます.この値が空の場合、このリクエストヘッダは無視されます.そうでなければtoString
メソッドが呼び出され、その結果、この値が与えられます.@GET("user")
Call getUser(@Header("Authorization") String authorization)
各リクエストに複数のリクエストヘッダを追加する必要がある場合はOkHttpブロッキングを使用します
6.同期vs非同期
Call
の例は、同期または非同期で実行することができる.各インスタンスは1回しか使用できませんが、clone()を使用すると使用可能な新しいインスタンスが作成されます.Androidでは、コールバックメソッドがメインスレッドで実行されます.JVMでのコールバックメソッドは、HTTPリクエストを実行するのと同じスレッドで実行されます.もっと勉強したいですか.
Retrofit公式サイトの紹介を読むことをお勧めします.Retrofit 2でHTTPリクエストRest Apiの紹介を簡略化します.