Android Okhttp+Retrofit2.0+RxJava简单解析
2017-09-08 14:17
260 查看
前言:
今天的重点就是来介绍一下Retyofit2.0的使用方式, retrofit是由square公司开发的。square在github上发布了很多优秀的Android开源项目。例如:otto(事件总线),leakcanary(排查内存泄露),android-times-square(日历控件),dagger(依赖注入),picasso(异步加载图片),okhttp(网络请求),retrofit(网络请求)等等。更多square上的开源项目我们可以去square的GitHub进行查看。这次就来介绍一下retrofit的一些基本用法。retrofit是REST安卓客户端请求库。使用retrofit可以进行GET,POST,PUT,DELETE等请求方式。下面就来看一下retrofit的基本用法。Retrofit的使用方式
一 添加Gradle依赖项
compile 'com.squareup.retrofit2:retrofit:2.3.0'
二Retrofit
简单三步就可以实现Retrofit2.0异步的操作,如图所示2.1:创建API接口
在retrofit中通过一个Java接口作为http请求的api接口。关于注解这一块后期会分析,今天就先简单的介绍一下get post和上传文件的时候所使用到的注解,如何定义API接口。get的请求方式
public interface GitHubApi { @GET("repos/{owner}/{repo}/contributors") //使用注解path来定义两个String类型参数 Call<ResponseBody>contributorsBySimpleGetCall(@Path("owner") String owner, @Path("repo") String repo); }
关于get请求方式的API接口中使用的注解还可以用@Query,@QueryMap来表示
@GET("search/repositories") Call<RetrofitBean> queryRetrofitByGetCall(@Query("q")String owner, @Query("since")String time, @Query("page")int page, @Query("per_page")int per_Page);
当我们的参数过多的时候我们可以通过@QueryMap注解和map对象参数来指定每个表单项的Key,value的值。
@GET("search/repositories") Call<RetrofitBean> queryRetrofitByGetCallMap(@QueryMap Map<String,String> map);
在Retrofit 2.0添加了一个新的注解:@Url,它允许我们直接传入一个请求的URL。这样以来我们可以将上一个请求的获得的url直接传入进来。方便了我们的操作。
@GET Call<List<Contributor>> repoContributorsPaginate(@Url String url);
post的请求方式
我们可以使用@FormUrlEncoded注解来发送表单数据。使用 @Field注解和参数来指定每个表单项的Key,value为参数的值。
@FormUrlEncoded @POST("user/edit") Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
当我们有很多个表单参数时可以通过@FieldMap注解和Map对象参数来指定每个表单项的Key,value的值。
@FormUrlEncoded @POST("user/edit") Call<User> updateUser(@FieldMap Map<String,String> fieldMap);
发送文件
通过@Multipart注解来发送Multipart数据。通过@Part注解来定义需要发送的文件。
@Multipart @PUT("/user/photo") User updateUser(@Part("photo") TypedFile photo, @Part("description") TypedString description);
请求头部的定义
//请求头 @Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: RetrofitBean-Sample-App", "name:liangguliang" })
2.2:创建Retrofit
最基本的初始化Retrofit retrofit=new Retrofit.Builder().baseUrl("https://api.github.com/").build();
创建retrofit实例,我们通也过addConverterFactory指定一个factory来对响应反序列化,在这里converters被添加的顺序将是它们被Retrofit尝试的顺序。
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .build();
2.3:实例化API接口
GitHubApi repo = retrofit.create(GitHubApi.class); Call<List<Contributor>> call = repo.contributorsByAddConverterGetCall(mUserName, mRepo);
2.4:通过接口实现异步请求
call.enqueue(new Callback<List<Contributor>>() { @Override public void onResponse(Call<List<Contributor>> call, Response<List<Contributor>> response) { List<Contributor> contributorList = response.body(); for (Contributor contributor : contributorList){ Log.d("login", contributor.getLogin()); Log.d("contributions", contributor.getContributions() + ""); } } @Override public void onFailure(Call<List<Contributor>> call, Throwable t) { } });
Retroft的使用是不是挺简单的~
三 Okhttp+Retrofit2.0
okHttp+Retrofit2.0实现异步操作的方式单独使用Retrofit多了一个设置client()的方法创建OkhttpClient来设置时间间隔,增加日志信息,设置缓存等
设置超时时间如图所示
//手动创建一个OkHttpClient并设置超时时间 okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(5, TimeUnit.SECONDS); Retrofit retrofit = new Retrofit.Builder() .client(builder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl("http://www.izaodao.com/Api/") .build();
在retrofit2.0中是没有日志功能的。但是retrofit2.0中依赖OkHttp,所以也就能够通过OkHttp中的interceptor来实现实际的底层的请求和响应日志。在这里我们需要修改上一个retrofit实例,为其自定自定义的OkHttpClient。代码如下:
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(httpLoggingInterceptor) .build(); Retrofit retrofit = new Retrofit.Builder().addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(okHttpClient) .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .build();
好了,Retrofit2.0的使用是不是简化了很多~就单独的来说,OkHttp的网络请求也是很好用的,之前写过一篇介绍Okhttp的简单用法,http://blog.csdn.net/qq_31927865/article/details/77506972推荐文章鸿神的http://blog.csdn.net/lmj623565791/article/details/47911083
相关文章推荐
- Retrofit 2.0 + RxJava 2.0搭建简单的Android请求框架。
- Android Retrofit2.0+RxJava简单示例
- android MVP+Retrofit2.0与RxJava网络请求数据,listview展示
- retrofit2.0+okhttp3+rxjava的封装(简单好用)
- 基于ijkplayer+Rxjava+Rxandroid+Retrofit2.0+MVP+Material Design的android万能播放器
- Android基于Retrofit2.0和RXJava2.0 的HTTPS网络请求搭建
- 及其简单的Rxjava+Retrofit+Fresco+ok,mvp小Dome解析数据
- Android 基于Retrofit+Rxjava搭建的简单易用的网络架构
- Retrofit2.0和Rxjava结合使用的简单记录
- Retrofit+RxJava+RxAndroid+OkHttp简单封装
- Android Retrofit2.0配合RxJava2.0请求网络
- Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android框架学习之Retrofit(二)RxJava和Retrofit2.0的结合使用
- Android 当前比较新的框架组合,Retrofit,OKHttp,RXJava的一些简单使用
- Android 框架设计Demo,一个简单的MVP示例搜索功能,网络请求用Retrofit+RxJava实现
- rxjava+rxandroid+retrofit2.0使用方法demo讲解
- Android-网络框架04Retrofit2.0+RxJava
- Android网络之Retrofit2.0使用和解析
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架