最近Retrofit框架大火,学习并记录一下,并且进行了简单的封装
1.首先定义接口
public interface LoginServer{
@POST("/123/login") //@POST很明显是用来标记请求方式的 当然一定有@GET
Call<LoginBean> getString //要接受返回参数的bean类型 方法名getString可以自定义 只要跟下面调用的地方对应即可
(@Query("username")String username, //通过@Query注解需要的参数
@Query("pwd")String pwd,
@QueryMap Map<String,String> map); //通过@QueryMap注解通过Map类型传入参数
//还有一些其他的注解可以定义参数 比如传入list参数的类型 等等 这里使用这两种方法
//经过测试 @Query和@QueryMap注解可以同时使用 可以在map中放入一些固定的参数
}
2.获得一个Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ConstantValue.COMMON) //传入baseUrl
.addConverterFactory(GsonConverterFactory.create()) //加入对gson的支持 如果需要支持rxjava也需要加入 这里先不加
.build();
3.创建一个Call对象
LoginServer server = retrofit.create(LoginServer .class); //传入刚才定义的接口
Call<UserInfoBean> call = server.getString("username"); //UserInfoBean是要接收参数的bean类型
4.发送异步联网请求
call.enqueue(new Callback<UserInfoBean>() {
@Override
public void onResponse(Call<UserInfoBean> call, Response<UserInfoBean> response) {
response.body(); //这个方法返回的是得到的UserInfoBean
}
@Override
public void onFailure(Call<UnitBeanTreeBean> call, Throwable t) {
}
});
retrofit也支持发送同步的请求,这里就不写了,用不到
最近自己简单封装了一个RetrofitBuilder
项目地址:https://github.com/peirato/RetrofitBuilder
使用时 首先 设置baserul 在RetrofitBuilder方法中 这个地方:
retrofit = new Retrofit.Builder()
.baseUrl("http://www.weather.com.cn") //填入baseUrl
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
在联网的时候调用就行
RetrofitBuilder.build()
// .param("city","beijing") //该请求不需要参数 如果需要参数这么写就行
// .param("day","2.14")
.get("/data/sk/101010100.html", new RetrofitBuilder.CallBack<WertherBean>() {
@Override
public void onSuccess(WertherBean bean) {
tv.setText(bean.getWeatherinfo().toString());
}
@Override
public void onError(String errMsg) {
}
@Override
public void onFailure() {
}
});
}