传送门安卓的更新换代,各种新框架,各种新的控件,当我安卓5.0的新特性还没熟悉的时候什么安卓6.0就出来了。就像网络框架,不说我们经常是原生态的http请求,还有前两年Volley框架,到如今的okhttp,retrofit。感觉现在谁网络请求不用个okhttp就有一种跟不上时代潮流。
retrofit是什么
retrofit框架的底层是基于okhttp,但是呢,它对http进行的封装、
如何使用retrofit
毫无疑问,在我们的android studio进行引入
与okhttp不同的是,retrofit需要定义一个接口
public interface RequestSerives {
@POST("{name}")
Call<String> getString(@Query("loginname") String loginname,
@Query("nloginpwd") String nloginpwd);
}
然后创建一个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();
随后根据retrofit对象创建RequestSerivice对象,以及Call
RequestSerives requestSerives = retrofit.create(RequestSerives.class);//这里采用的是Java的动态代理模式
Call<String> call = requestSerives.getString("userName", "1234");//传入我们请求的键值对的值
然后我们开始介绍,刚开始我们定义的接口的含义,其中post后面的name相当于一个占位符,会被baseUrl(“http://106.3.227.33/pulamsi/“),这里面的字符串所替代,至于post的意思当然是指为post请求。
@query是指的键值对,也就是下面方法进行调用的:
retrofit.create(RequestSerives.class);//这里采用的是Java的动态代理模式
Call<String> call = requestSerives.getString("userName", "1234");//传
这之后我们就可以进行数据的获取,例如
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.e("成功",response.body().toString());
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.e("失败","失败");
}
});
还有一点需要注意的是,默认的情况下,retrofit用的是gson解析,我们的返回值可以是gson解析过的对象。