Retrofit 2.0关于get和post的网络访问的简单使用

来源:互联网 发布:拓普康332n软件 编辑:程序博客网 时间:2024/05/22 08:27

Retrofit 2.0已经发布很久了,由于个人原因,现在才稍有接触。其他地方关于这个框架的中文介绍都只是之言片语。使得学习起来比较麻烦一些。一般来说这种比较强大的框架,学习起来都有一些难度,有时候也只运用它的一个功能模块。最近由于工作需要我学习使用了这个框架来进行网络的get和post请求来对数据进行操作。由于只是初次使用,了解还不深入,只能稍微介绍一下。

retrofit底层默认使用的就是okhttp。

优点:

可以配置不同HTTPclient来实现网络请求,如okhttp、httpclient等

请求的方法参数注解都可以定制

支持同步、异步和RxJava

超级解耦

可以配置不同的反序列化工具来解析数据,如json、xml等

使用非常方便灵活

框架使用了很多设计模式(感兴趣的可以看看源码学习学习)

缺点:

不能接触序列化实体和响应数据

执行的机制太严格

使用转换器比较低效

只能支持简单自定义参数类型

我所要解析的数据是json格式,说实话,使用这个框架真心非常的爽。个人认为不接触序列化实体是它最明显的缺点。

下面按照步骤介绍一下使用步骤:

1. 在androidstudio的gradle中导入依赖

compile 'com.squareup.retrofit:retrofit-mock:2.0.0-beta2'compile 'com.squareup.okhttp:okhttp:2.7.5'compile 'com.squareup.okio:okio:1.11.0'compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
2.然后写一个类来进行get和post的注解:

public class Appstore {//例如URl为:    // http://host/mobile/oauth/requireorder/publisher/2333/order?status=-1&start" + //   "=0&size=1000000000&c=E12C8F80739"    //    1.定义一个接口    public interface IPService {        //    1.1.get请求:通过@GET注解,指明访问的地址        @GET()//★这里最前面不能带“/”//    1.2.定义一个请求网络,并且返回结果的方法(方法返回Call<Mydata> ),//     通过@Url来指定url
//这里的IP是一个数据类,        Call<Mydata> getIP(@Url() String ip);        /*********************************************************************************///    1.3.post请求:通过@FormUrlEncoded、和@POST注解,指明访问的地址//        (★注意:千万别忘了@FormUrlEncoded)        @FormUrlEncoded        @POST()//           Call<Mydata> postIP(@Url() String ip);    }    //    2.实例化retrofit,配置好请求地址和解析方式    static Retrofit retrofit = new Retrofit.Builder()            .baseUrl("http://host/")//★这里最后面必须能带“/”            .addConverterFactory(GsonConverterFactory.create())//设置将json解析为javabean所用的方式            .build();//    //    3.通过retrofit创建第一步定义的接口的实例,////      供在外部直接通过该实例调用该接口的getIPad方法,完成网络请求    static Appstore.IPService iPService =            retrofit.create(Appstore.IPService.class);}
3.进行这个封装之后就可以调用了。调用如下:

String  ur=" mobile/oauth/requireorder/publisher/123456/order?status=-1&start=0&size=1000000000&c=E12C8F8073988A12499D28";final Call<Mydata> call = Appstore.iPService.getIP(ur);call.enqueue(new Callback<Mydata>() {    @Override    public void onResponse(Response<IP> response, Retrofit retrofit) {       Mydata  body=response.body();//取出解析的数据                call.cancel();//必须关闭    }    @Override    public void onFailure(Throwable t) {    }});
注:数据的封装类。使用GsonFormat来进行数据封装。(删除了大部分数据)
public class Mydata {    public static class DataBean {        private int totalItemNum;        private List<ItemsBean> items;        public static class ItemsBean{            private RequireOrderEntityBean requireOrderEntity;                        private RequireEntityDisplayVOBean requireEntityDisplayVO;                     private ResumeDisplayVOBean resumeDisplayVO;                              public Object getUpdatetime() {                        return updatetime;                    }                public void setStatusName(String statusName) {                    this.statusName = statusName;                }    }}
对于Retrofit 2.0的认知还很肤浅。需要在实践中加深认知。也希望大神指教。

相关学习资料的网址

  1. retrofit官网: http://square.github.io/retrofit/
  2. github地址: https://github.com/square/retrofit
  3. Simple HTTP with Retrofit2:
    https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/


0 0
原创粉丝点击