Retrofit

1、Retrofit是什么?

A type-safe HTTP client for Android and Java

Retrofit是一个类似Google Volley的对OkHtto进行过封装的网络框架,使用起来非常的简单。Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了。

2、Retrofit如何使用?

1)添加Gradle依赖:

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

2)定义接口以及网络方法:

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

3)实现接口和方法:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();
GitHubService service = retrofit.create(GitHubService.class);

4)利用接口的实现类生成的对象调用网络方法,获取数据:

Call<List<Repo>> call= service.listRepos("octocat");
call.enqueue(new Callback<List<Repo>>() {
    @Override
    public void onResponse(Response<List<Repo>> response) {
// 数据
    }
    @Override
    public void onFailure(Throwable t) {
// 异常
    }
});

提示:

Retrofit的网络访问支持同步和异步以及取消:

同步调用:call.execute();

异步调用:call.enqueue();

取消调用:call.cancel()。

3、Retrofit日志查看?

public class AppClient {
    private static final int DEFAULT_TIMEOUT = 10;
    private static Retrofit mRetrofit;

    public static Retrofit getInstance() {
        if (mRetrofit == null) {
            mRetrofit = new Retrofit.Builder()
                    .baseUrl("http://www.weather.com.cn/")
                    .client(getClient())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return mRetrofit;
    }

    /**
     * 自定义OkHttpClient:添加日志打印功能(可以在测试版本中开启、在正式版本中关闭)
     *
     * @return
     */
    private static OkHttpClient getClient() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                .build();
        return okHttpClient;
    }
}

因为Retrofit是基于OkHttp的封装,我们还可以自定义一些网络配置,这里集成了日志输出框架,可以方便我们查看网络访问的日志,便于调试,非常好用,大家可以试试。