Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton。


导包:

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
* 这里需要值得注意的是导入的retrofit2包的 版本必须要一致 ,否则就会报错。


首先定义我们请求的Api,我们假设是这样的

http://106.3.227.33/pulamsi/mobileLogin/submit.html
与Okhttp不同的是,Retrofit需要定义一个接口,用来返回我们的Call对象,这里示范的是Post请求:

public interface RequestServes {    @POST("mobileLogin/submit.html")    Call getString(@Query("loginname") String loginname,                           @Query("nloginpwd") String nloginpwd);}


Retrofit提供的请求方式注解有 @GET @POST ,参数注解有 @PATH @Query 等,我们只介绍常用的;前两个顾名思义就是定义你的请求方式 Get or Post ,后面的 @PATH 指的是通过参数填充完整的路径,一般用法:

@GET("{name}")
Call getUser(@Path("name") String name);

这里的参数username会被填充至{name}中,形成完整的Url请求地址,{name}相当于一个占位符;

@Query就是我们的请求的键值对的设置,我们构建Call对象的时候会传入此参数,

123
@POST("mobileLogin/submit.html")   Call getString(@Query("loginname") String loginname,                          @Query("nloginpwd") String nloginpwd);
这里 @Query("loginname") 就是键,后面的 loginname 就是具体的值了,值得注意的是Get和Post请求,都是这样填充参数的;


接口写完了之后我们需要来定义Retrofit对象来进行请求了;

创建一个Retrofit 对象

Retrofit retrofit = new Retrofit.Builder()               .baseUrl("http://106.3.227.33/pulamsi/")               //增加返回值为String的支持               .addConverterFactory(ScalarsConverterFactory.create())               //增加返回值为Gson的支持(以实体类返回)               .addConverterFactory(GsonConverterFactory.create())               //增加返回值为Oservable的支持               .addCallAdapterFactory(RxJavaCallAdapterFactory.create())               .build();

这里的baseUrl加上之前@POST("mobileLogin/submit.html")定义的参数形成完整的请求地址;

addConverterFactory(ScalarsConverterFactory.create())的意思是构建了一个返回支持,如果你的Call对象的泛型接收另外的格式需要添加另外的支持,上述代码已经列出;

接下来我们用这个Retrofit对象创建一个RequestSerives接口对象,也就是我们之前定义的那个接口,并且得到我们的Call对象;

 
RequestSerives requestSerives = retrofit.create(RequestSerives.class);//这里采用的是Java的动态代理模式Call call = requestSerives.getString("userName", "1234");//传入我们请求的键值对的值
利用得到的Call对象,然后我们就发出网络请求了:

call.enqueue(new Callback() {    @Override    public void onResponse(Call call, Response response) {        Log.e("===","return:"response.body().toString());    }    @Override    public void onFailure(Call call, Throwable t) {        Log.e("===","失败");    }});

先简单介绍到这里,持续更新中。。。






更多相关文章

  1. Android保证首次获取到的location对象不为空的解决方案
  2. Android自定义Gallery,实现CoverFlow效果
  3. Android实现在xml文件中引用自定义View的方法分析
  4. 自定义控件:抽屉SlidingDrawer——wrap_content非全屏
  5. android 数据库建立以及自定义ContentProvider
  6. SeekBar自定义样式
  7. Android 如何在IDEA Eclipse 的UI Editor 中显示自定义的字体 Pr

随机推荐

  1. Android(安卓)Widget小组件开发(一)——And
  2. android 仿ios 对话框已封装成工具类
  3. Android(安卓)OpenGLES2.0(十七)——球形天
  4. Android的内存泄漏怎么治-----------MAT
  5. Android(安卓)React Native加载图片资源
  6. Android如何强制刷新view--比较偏的考试
  7. Android(安卓)10获取设备标识方案探究
  8. android 中一个项目工程引用另一个项目工
  9. 最全Android学习路线总结,绝对干货
  10. 编译可在Android上运行的依赖库:glib库