Android中Retrifit使用总结
Android中网络请求框架Retrofit的使用注意事项
1.Retrofit是基于OkHttp网络请求框架的二次封装而已,懂Okhttp的小伙伴,那么Retrofit也就基本都会。
2.Retrofit采用注解配置请求的方式:
以@GET(get请求)和@POST(post请求)两种方式 @Query,表示请求上一个请求参数 @QueryMap,表示请求上多个请求参数
3.Retrofit采用框架初始化请求方式:有一个call,表示异步请求线程。
具体的代码详见如下:
第一,写一个对应对象的javabean,我相信小伙伴们都会,不多说,此处以Object为例来说明
第二,在一个单独的类中去写请求地址的标识符号,便于后期项目的维护,代码如下:
public class ApiUrls { //app主页类型标识符 public static final String HOME="home"; }
第三,写一个请求主页地址api的接口:代码如下:
public interface XiaoKeApi { //请求主页地址的方法 @GET(ApiUrls.HOME) Call<Object> getHomeData(); }
第四,简单封装Retrofit,代码如下:
public class HttpUtils { private static XiaoKeApi xiaokeApi; public static XiaoKeApi getApi() { if (xiaokeApi == null) { //初始化retrofit框架 Retrofit build = new Retrofit.Builder() //1.配置主机地址 .baseUrl("http://192.168.xxoo.xxoo.8080/XiaoKeService/") //2.解析json的工具 .addConverterFactory(GsonConverterFactory.create(new Gson())).build(); //读取接口上面的参数 xiaokeApi = build.create(XiaoKeApi.class); } return xiaokeApi; }
第五,封装一个简单的回调callBack方法:方便解析json数据,代码如下:
public class SimpleCallBack implements Callback<Object> { @Override public void onResponse(Call<Object> call, Response<Object> response) { Object body = response.body(); String json = body.data; if (TextUtils.isEmpty(json)) { showError(0, new RuntimeException("亲!取得数据为空")); } else { showData(1, json); } } @Override public void onFailure(Call<Object> call, Throwable t) { t.printStackTrace(); showError(-1, t); } protected void showError(int i, Throwable t) { } protected void showData(int i, String json) { } 注意:这里的showError和showData两个方法,是需要在使用的类中,自己做业务逻辑处理
第六,在真正使用的类中添加如下代码,即可完成Retrofit的网络请求过程:
public void onClick() {
Call<Object> call = HttpUtils.getApi().getHomeData();
//Callback数据返回处理对象http://www.90168.org/
SimpleCallBack callback=new SimpleCallBack(){
@Override
protected void showError(int i, Throwable t) {
super.showError(i, t);
---
}
@Override
protected void showData(int i, String json) {
super.showData(i, json);
HomeData data= http://blog.csdn.net/u014745194/article/details/new Gson().fromJson(json,HomeData.class);
---
}
};
call.enqueue(callback);
}