Retrofit2.0学习总结
学习背景:
今天和一个后台的同事聊天,说你们现在后台开发什么框架最流行,同事说.当然是REST了,和app对接开发
REST既方便又快捷.正好我要和他对接支付方面,所以干脆紧跟时代的潮流,学习一下这个github现在最高的
框架.
什么是REST?(此段是百度粘贴的,感谢度娘.)
REST(REpresentational State Transfer)是一组架构约束条件和原则。
RESTful架构都满足以下规则:
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。
运行结果为:
OKHTTP简易封装.
client = new OkHttpClient.Builder() .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))//注册一个本地应用拦截器,这里有好几个状态. BASIC / HEADERS / BODY 公共参数,头信息,日志拦截 .retryOnConnectionFailure(true)//是否自动重连 .connectTimeout(15, TimeUnit.SECONDS)//设置连接超时 .readTimeout(10,TimeUnit.SECONDS)//设置读超时 .writeTimeout(10,TimeUnit.SECONDS)//设置写超时 .addNetworkInterceptor(new LoggingInterceptor())//注册一个网络拦截器 .build();//构建okhttp
Retrofit简单封装
gson = new GsonBuilder() //配置你的Gson .setDateFormat("yyyy-MM-dd hh:mm:ss") .create(); retrofit = new Retrofit.Builder() .client(OkHttpUtil.getInatance().getOkHttpClient())//设置okhttp .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//提供RxJava支持,如果没有提供响应的支持(RxJava,Call),则会跑出异常。 .addConverterFactory(GsonConverterFactory.create(gson))//因为这里和后台是通过json交互,所以需要创建一个GsonConverterFactory,可以添加多种序列化Factory .baseUrl(BASE_URL) .build();
//这里在初始化的时候就创建了一个RetroFit的对象.我们可以用这个对象来拼接参数进行post和get请求啦
APIInterface 接口
public interface APIInterface { /** * 获取节目单 这里一定要注意上面注解中的参数名称和下面path中的参数一定要一模一样.大家还是copy吧.这里坑死我了,一直报正则表达式异常* @param al_id * @param hid * @param uid * @return */ @POST("/program/{al_id}/{hid}/{uid}") Call<ProgramInfo> getProgramInfo(@Path("al_id") String al_id, @Path("hid") String hid, @Path("uid") String uid); /** * 获取升级 * @param channel_id * @param app_id * @param app_version * @param mac * @return */ @GET("/upgrade/{channel_id}/{app_id}/{app_version}/{mac}") Call<Update> getUpdate(@Path("channel_id") String channel_id, @Path("app_id") String app_id, @Path("app_version") String app_version, @Path("mac") String mac); }
使用方式:
RetrofitUtil.getInatance().getProgramInfo("9", "4", "1", new Callback() { @Override public void onResponse(Call call, Response response) { Log.d("lichao","success....." + response.body().toString()); } @Override public void onFailure(Call call, Throwable t) { Log.d("lichao","fail....." +t.getMessage() textView.setText(t.getMessage()); } });这里会直接调用
重要知识点:retrofit:注解
其他注解,@Path、@Header,@Headers、@Url
方法注解,包含@GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。
标记注解,包含@FormUrlEncoded、@Multipart、@Streaming。
参数注解,包含@Query,@QueryMap、@Body、@Field,@FieldMap、@Part,@PartMap@HTTP:可以替代其他方法的任意一种
@Url:使用全路径复写baseUrl,适用于非统一baseUrl的场景。
先写到这里.如果想要了解自定义Converter,请看下一篇文章.
github地址:https://github.com/LoveCandy1314/RetrofitDemo
这次要感谢一下文章支持:
http://blog.csdn.net/wbwjx/article/details/51379506
http://www.jianshu.com/p/2710ed1e6b48