Retrofit是Square开发的一个Android和Java的REST客户端库。这个库非常简单并且具有很多特性,相比其他的网络库,更容易让初学者快速掌握。它可以处理GET、POST、PUT、DELETE…等请求,还可以使用picasso加载图片,Retrofit 2.0底层依赖OkHttp实现,也就是说Retrofit本质上就是对OkHttp的更进一步封装。Retrofit和其它Http库最大区别在于通过大范围使用注解简化Http请求。
在 build.gradle 文件中添加依赖,在 Manifest.xml文件中添加所需的网络权限。
整个网址:http://gank.io/api/data/Android/10/1
接口:
在 build.gradle 文件中添加依赖,在 Manifest.xml文件中添加所需的网络权限。
// build.gradle
compile 'com.squareup.retrofit:retrofit:2.0.1-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
// AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
下面就是对Retrofit的进行的一个网络请求的封装:
package http;
import retrofit2.GsonConverterFactory;
import retrofit2.Retrofit;
public class HttpUtils {
private static volatile HttpUtils instance;
private Retrofit retrofit;
private Class service;
private HttpUtils() {}
public HttpUtils(String baseurl) {
retrofit = new Retrofit.Builder()
.baseUrl(baseurl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static HttpUtils getInstance(String baseurl) {
if(instance == null) {
synchronized (HttpUtils.class) {
if(null == instance) {
instance = new HttpUtils(baseurl);
}
}
}
return instance;
}
public static HttpUtils getInstance() {
if(null == instance) {
return getInstance("http://gank.io/api/data/Android/");
}
return instance;
}
public Retrofit getRetrofit() {
return retrofit;
}
public <T> void create(Class<T> cls) {
service = (Class) retrofit.create(cls);
}
public Class getService() {
return service;
}
}
封装好后,还需要写一个接口用来回调,接口中要用注解来决定使用什么请求方式,下面代码中我使用了Get请求,在括号中写写入网络地址的请求数据。
整个网址:http://gank.io/api/data/Android/10/1
接口:
package http;
import java.util.List;
import Bean.Catetory;
import Bean.MessBean;
import retrofit2.Call;
import retrofit2.http.GET;
public interface ApiService {
@GET("10/1")
Call<MessBean<List<Catetory>>> getCatetory();
}
接下来在说一说如何使用封装好的Retrofit:
//调用封装好的Retrofit(HttpUtils)来获取retrofit,通过retrofit.create(写接口名.class)
//在通过接口调用接口内方法获取数据集合,然后用数据集合.enqueue进行异步任务.
retrofit = HttpUtils.getInstance().getRetrofit();
ApiService apiService = retrofit.create(ApiService.class);
Call<MessBean<List<Catetory>>> getCatetory = apiService.getCatetory();
getCatetory.enqueue(new Callback<MessBean<List<Catetory>>>() {
@Override
public void onResponse(Call<MessBean<List<Catetory>>> call, Response<MessBean<List<Catetory>>> response) {
MessBean<List<Catetory>> body = response.body();
List<Catetory> results = body.getResults();
}
@Override
public void onFailure(Call<MessBean<List<Catetory>>> call, Throwable t) {
}
});