欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Retrofit的简单介绍和使用

程序员文章站 2023-11-12 22:07:10
retrofit与okhttp共同出自于square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了okhttp,我们只需要通过简单的配置就能使用...

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<string> getstring(@query("loginname") string loginname,
              @query("nloginpwd") string nloginpwd);
}

retrofit提供的请求方式注解有@get和@post,参数注解有@path和@query等,我们只介绍常用的;前两个顾名思义就是定义你的请求方式get or post,后面的@path指的是通过参数填充完整的路径,一般用法:

@get("{name}")
call<user>
getuser(@path("name") string name);

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

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

@post("mobilelogin/submit.html")
  call<string> 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<t>的支持
        .addcalladapterfactory(rxjavacalladapterfactory.create())
        .build();

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

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

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

requestserives requestserives = retrofit.create(requestserives.class);//这里采用的是java的动态代理模式
call<string> call = requestserives.getstring("username", "1234");//传入我们请求的键值对的值

利用得到的call对象,然后我们就发出网络请求了:

call.enqueue(new callback<string>() {
  @override
  public void onresponse(call<string> call, response<string> response) {
    log.e("===","return:"response.body().tostring());
  }
  @override
  public void onfailure(call<string> call, throwable t) {
    log.e("===","失败");
  }
});

以上所述是小编给大家介绍的android retrofit的简单介绍和使用,希望对大家有所帮助