Retrofitの基本使用


retrofit紹介
Retrofitはokhttpと共同でSquare社から出ており、retrofitはokhttpをパッケージ化している.ネットワークリクエストはすべてOkhttpに渡して、私达は简単な配置を通じてretrofitを使うだけでネットリクエストを行うことができて、その主な作者はAndroid大神JakeWhartonが兴味を持っているのは公式サイトに行って调べることができます:retorfit公式サイト
retrofit使用
ガイドパック
直接build gradleに依存を追加すればいいです.
//Retrofit 2に必要なパッケージcompile'com.squareup.retrofit2:retrofit:2.0.0-beta 4'//converterFactoryのGson依存パッケージcompile'com.squareup.retrofit2:converter-gson:2.0.0-beta 4'//converterFactoryのString依存パッケージcompile'com.squareup.retrofit2:converter-scalars:2.0.0-beta4’
使用
Retrofitが提供する要求方式注釈は@GETと@POST、パラメータ注釈は@PATHと@Queryなどの詳細な注釈対応の解釈と処理方式はこの文章を参考にすることができる.http://blog.csdn.net/fuhao476200/article/details/52980318
Getリクエスト
例:RetrofitNetServiceビジネス・アクセス・インタフェースの作成には、次の注記が追加されます.
 @GET("goods/{id}")
 Call getgoods(@Path("id") int id);

Call,ここでTは返されるデータ型であり,知っていれば対応するタイプを記入することができ,知らない場合は汎用型で代用するか,ResponseBodyで代用することができる.PathはUrlパスの変数文字を置換するために使用され、ここでのパラメータidは{id}に埋め込まれ、完全なUrl要求アドレスを形成し、{id}は1つのプレースホルダに相当する.
例:
    @GET("book/search")
    Call getSearchBooks( @Query("name") String name,     @Query("tag") String tag);                                                                                   

@Queryは、Urlパスの後に続くクエリー・パラメータに使用されますが、@Queryは、Urlの後に直接接続するのに対して、BaseUrl+book/searchのような変数を追加します.name={name}&type={type}推奨:タイプおよび対応urlモードを表示できます
@QueryMapはQueryと同様に、複数のパラメータの例にすぎません.
  @GET("News")
  Call getItem(@QueryMap Map<String, String> map);

または
  @GET("News")
  Call getItem( @Query("newsId") String newsId,@QueryMap Map<String, String> map);

postリクエスト
@Post postリクエストには約4つの方法があり、通常は2つの方法でフォームにキー値を送信します.
  @FormUrlEncoded
    @POST("Comments/{newsId}")
    Call reportComment(
        @Path("newsId") String commentId,
        @Query("access_token") String access_token,
        @Field("reason") String reason);

@bodyタイプコミット方式:RequestBody
//           @Headers({"Contenttype:application/json;charset=UTF-8"})
     @POST("login")
    Call loginApp(@Body RequestBody requestBody);    

ヘッダーの追加
注記の使用方法
Headerパラメータを追加
@Headers({"Contenttype:application/json;charset=UTF-8"})
    @GET("/tasks")  
    Call> getTasks(); 

複数のHeaderパラメータを追加
  @Headers({  
        "Accept: application/vnd.yourapi.v1.full+json",  
        "User-Agent: Your-App-Name"  
    })  
    @GET("/tasks/{task_id}")  
    Call getTask(@Path("task_id") long taskId); 

ダイナミックヘッドの追加
    @FormUrlEncoded
    @POST("checkout")
    Call<CheckOutResponse> checkout(@Header("userid") String userId, @FieldMap Map<String, String> params);

ヘッダーの統一追加
コードを使用するには、ブロッキングを使用する必要があります.
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();    
httpClient.addInterceptor(new Interceptor() {    
    @Override  
    public Response intercept(Interceptor.Chain chain) throws IOException {  
        Request original = chain.request();  
        Request request = original.newBuilder()  
            .header("token", "a")
            .header("tokenb","b")             
            .method(original.method(), original.body())  
            .build();  
        return chain.proceed(request);  
    }  
}  

OkHttpClient client = httpClient.build();    
Retrofit retrofit = new Retrofit.Builder()    
    .baseUrl(API_BASE_URL)  
    .addConverterFactory(GsonConverterFactory.create())  
    .client(client)  
    .build();  

たんじゅんぶんそう
**
 * @    wyj
 * @     2017/11/8 10:22.
 * @  
 * @   
 * @     2017/11/8 10:22.
 */

public class RetrofitUtil {

    private static Retrofit retrofit;
    private static OkHttpClient.Builder sHttpClient;
    private static OkHttpClient sClient;

    /**
     * @return retrofit   
     */
    public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {
            synchronized (Retrofit.class) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(Url.BaseUrl)                       .addConverterFactory(GsonConverterFactory.create())
                        .client(getOkHttpClient())
                        .build();
            }
        }
        return retrofit;
    }

    private static OkHttpClient getOkHttpClient() {
        if (sHttpClient == null) {
            sHttpClient = new OkHttpClient.Builder();
            sHttpClient.addInterceptor(new Interceptor() {
                @Override
                public okhttp3.Response intercept(Chain chain) throws IOException {
                    Request original = chain.request();
                    Request request = original.newBuilder()
                            .addHeader("token","efgh")
                            .addHeader("code","abcd")
                            .method(original.method(), original.body())
                            .build();
                    return chain.proceed(request);
                }
            });
            if (sClient == null) {
                sClient = sHttpClient.build();
            }
        }
        return  sClient;

    }

    /**
     * @return     
     */
    public static RetrofitNetService getHttpServiceInstance() {
         return  getRetrofitInstance().create(RetrofitNetService.class);
    }

}

使用方法:
 RetrofitNetService httpServiceInstance = RetrofitUtil.getHttpServiceInstance();
RequestBody bod2y = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),GsonTools.createGsonString(loginBody));
        Call call = httpServiceInstance.loginApp(bod2y);

   //    
     /*   try {
            Response execute = call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }*/
        //    
        call.enqueue(new Callback() {
           @Override
           public void onResponse(Call call, Response response) {
               if (response.isSuccessful()) {
             LoginReturnBean body =response.body(); 
               }
           }

           @Override
           public void onFailure(Call call, Throwable t) {

           }
       });

httpに関するいくつかの基礎知識:http://www.jianshu.com/p/e544b7a76dac使用方法:http://www.jianshu.com/p/331f0bf161c2 http://www.jianshu.com/p/308f3c54abdd