qjbagu 2016-04-05
Retrofit是一个安卓端开源网络请求库,目前依赖于okhttp:
http://square.github.io/retrofit/
并提供了多种数据转换工厂和RxJava适配工厂接口。例如:
compile 'com.squareup.retrofit2:retrofit:2.0.1' compile 'com.squareup.retrofit2:converter-gson:2.0.1'
使用retrofit访问接口:
void test0() { //创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .build(); GithubService service = retrofit.create(GithubService.class); service.getContributors("square", "retrofit").enqueue( new Callback<List<ContributorBean>>() { @Override public void onResponse(Call<List<ContributorBean>> call , Response<List<ContributorBean>> response) { for (ContributorBean con : response.body()) { Log.e("TAG", con.login); } } @Override public void onFailure(Call<List<ContributorBean>> call , Throwable t) { t.printStackTrace(); } }); } interface GithubService { //https://api.github.com/repos/{owner}/{repo}/contributors @GET("/repos/{owner}/{repo}/contributors") Call<List<ContributorBean>> getContributors( @Path("owner") String owner, @Path("repo") String repo); } class ContributorBean { String login; String type; }
演示了一个带参Get请求,使用Gson做json数据转换。
若要加入RxJava来做事件处理:
void test0() { //创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); GithubService service = retrofit.create(GithubService.class); service.getContributors("square", "retrofit") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<ContributorBean>>() { @Override public void call(List<ContributorBean> contributorBeans) { for (ContributorBean con : contributorBeans) { Log.e("TAG", con.login); } } }); } interface GithubService { //https://api.github.com/repos/{owner}/{repo}/contributors @GET("/repos/{owner}/{repo}/contributors") Observable<List<ContributorBean>> getContributors( @Path("owner") String owner, @Path("repo") String repo); } class ContributorBean { String login; String type; }
产生了同样的效果。
使用flatMap实现链式调用:访问接口1->接口1返回后->访问接口2->接口2返回
void test0() { //创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); final GithubService service = retrofit.create(GithubService.class); service.getContributors("square", "retrofit") .flatMap(new Func1<List<ContributorBean>, Observable<List<EventBean>>>() { @Override public Observable<List<EventBean>> call(List<ContributorBean> contributorBeans) { for (ContributorBean con : contributorBeans) { Log.e("TAG", con.login); } return service.getEvents(); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<EventBean>>() { @Override public void call(List<EventBean> eventBeans) { for (EventBean eve : eventBeans) { Log.e("TAG", eve.created_at); } } }); } interface GithubService { //https://api.github.com/repos/{owner}/{repo}/contributors @GET("/repos/{owner}/{repo}/contributors") Observable<List<ContributorBean>> getContributors( @Path("owner") String owner, @Path("repo") String repo); //https://api.github.com/events @GET("events") Observable<List<EventBean>> getEvents(); } class EventBean { String id; String type; String created_at; } class ContributorBean { String login; String type; }
结束