近期,随着开发的需要,研究了一下网络请求Retrofit的功能,其实就是对okhttp的封装,使用起来很方便,主要是以注解的形式进行请求,下面是我看过一些博客大佬们写过的常用注解,
方法注解,包含@GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。
标记注解,包含@FormUrlEncoded、@Multipart、@Streaming。
参数注解,包含@Query,@QueryMap、@Body、@Field,@FieldMap、@Part,@PartMap。
其他注解,@Path、@Header,@Headers、@Url
这些注解都是以后慢慢深化时所需要的,不适合初步了解的开发者去全部吸收,接下来是入门级别的使用retrofit的简单get,post的使用
首先要导依赖:
在Actvity的oncreate方法中初步配置,使用构建者模式,其中baseUrl是基本网址,addConverterFactory是解析json字符串并返回对应Bean类client是okhttp的延伸配置,简单使用不用调用。
retrofit使用时,请求方式主要是以接口的形式实现,如下面代码块,get请求需要使用注解@GET,参数是地址,此地址是baseUrl的追加,用于填写完整路径
下面是接收对象,所有的retrofit接收对象都是Call集合,泛型可以是解析后对应的Bean类或是集合,还可以用自带的ResponseBody类接收,最后自行解析,我认为,
对应的Bean比较方便,Post请求和get请求区别不大,需要使用注解@FormUrlEncoded对所传地址进行编码解析,在自定义方法pgetUser中加注解@Field uid为请求参数
而后面的参数不但可以是String,还可以是Map集合的键值对形式,为了方便多个参数请求
这就是get,post请求的接口类内容;
重点是@GET,@Query,@FormUrlEncoded,@POST,@Field的使用
public interface UIData {
@GET("user/getUserInfo")
Call<User> getUser(@Query("uid") String uid);
@FormUrlEncoded
@POST("user/getUserInfo")
Call<User> pgetUser(@Field("uid") String uid);
}
接口类创建完毕,就开始调用使用//调用retrofit的create方法,获得接口类
final UIData uiData = retrofit.create(UIData.class);
//调用get请求的getUser方法,并返回gson解析后的的bean类
retrofit2.Call<User> user = uiData.getUser("88");
//使用call进行请求
user.enqueue(new retrofit2.Callback<User>() {
@Override
public void onResponse(retrofit2.Call<User> call, retrofit2.Response<User> response) {
String msg = response.body().getMsg();
System.out.println("数据=========="+msg);
}
@Override
public void onFailure(retrofit2.Call<User> call, Throwable t) {
System.out.println("数据=========="+t.toString());
}
});
post请求:
//同样的办法获得接口类
final UIData uiData = retrofit.create(UIData.class);
//post方法
Call<User> userCall = uiData.pgetUser("88");
userCall.enqueue(new retrofit2.Callback<User>() {
@Override
public void onResponse(retrofit2.Call<User> call, retrofit2.Response<User> response) {
String msg = response.body().getMsg();
System.out.println("数据=========="+msg);
}
@Override
public void onFailure(retrofit2.Call<User> call, Throwable t) {
System.out.println("数据=========="+t.toString());
}
});
User的Bean类:
public class User {
/**
* msg : 获取用户信息成功
* code : 0
* data : {"age":null,"appkey":null,"appsecret":null,"createtime":"2017-10-03T00:00:00","email":null,"gender":0,"icon":"http://120.27.23.105/images/88.jpg","mobile":"13716792264","money":0,"nickname":"张贺岗","password":"111111","token":null,"uid":88,"username":"13716792264"}
*/
private String msg;
private String code;
private DataBean data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* age : null
* appkey : null
* appsecret : null
* createtime : 2017-10-03T00:00:00
* email : null
* gender : 0
* icon : http://120.27.23.105/images/88.jpg
* mobile : 13716792264
* money : 0
* nickname : 张贺岗
* password : 111111
* token : null
* uid : 88
* username : 13716792264
*/
private Object age;
private Object appkey;
private Object appsecret;
private String createtime;
private Object email;
private int gender;
private String icon;
private String mobile;
private int money;
private String nickname;
private String password;
private Object token;
private int uid;
private String username;
public Object getAge() {
return age;
}
public void setAge(Object age) {
this.age = age;
}
public Object getAppkey() {
return appkey;
}
public void setAppkey(Object appkey) {
this.appkey = appkey;
}
public Object getAppsecret() {
return appsecret;
}
public void setAppsecret(Object appsecret) {
this.appsecret = appsecret;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Object getEmail() {
return email;
}
public void setEmail(Object email) {
this.email = email;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Object getToken() {
return token;
}
public void setToken(Object token) {
this.token = token;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
}
附上bean类,作为参考,最后完成
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'