Android Retrofit的使和封装

来源:互联网 发布:amarra for mac 编辑:程序博客网 时间:2024/06/07 20:00
Retrofit是Square开发的一个Android和Java的REST客户端库。这个库非常简单并且具有很多特性,相比其他的网络库,更容易让初学者快速掌握。它可以处理GET、POST、PUT、DELETE…等请求,还可以使用picasso加载图片,Retrofit 2.0底层依赖OkHttp实现,也就是说Retrofit本质上就是对OkHttp的更进一步封装。Retrofit和其它Http库最大区别在于通过大范围使用注解简化Http请求。

在 build.gradle 文件中添加依赖,在 Manifest.xml文件中添加所需的网络权限。
// build.gradlecompile '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) {            }        });





原创粉丝点击