初認識Retrofit 2——Retrofitの構成と基本的な使用

6273 ワード

本稿では,Retrofit 2というネットワークフレームワークを初心者に紹介することを目的とする.RetrofitとRetrofit 2の間のApiの変更は大きく、現在のRetrofitに関する文章の多くは以前のバージョンのapiを紹介している.そこでこの文章は運に応じて生まれた.この文書では、次のことがわかります.
  • Retrofitの使用に必要な依存
  • 最新依存Jarファイル取得方法(search.maven.org)
  • RetrofitによるHttp要求
  • Retrofit注釈Apiの簡単な紹介
  • Retrofit依存構成
    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の紹介を簡略化します.