Android Retrofit的简单介绍和使用
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的简单介绍和使用,希望对大家有所帮助