参考:
android 介绍Retrofit的简单使用
急速开发系列——Retrofit实战技巧
简介
retrofit是一种网络请求框架,内部是通过okHttp实现的
gradle
使用retrofit
需要在module的dependencies
添加依赖:
dependencies {
...
compile 'com.squareup.retrofit2:retrofit:2.1.0'
...
}
如果需要用retrofit自带的gson来解析数据,那么需要添加下面的解析方式,但是须知道json格式
//使用Gson解析,
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
如果自己解析json数据,那么需要添加:
//得到的数据是String类型
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
这里需要值得注意的是导入的retrofit2包的版本必须要一致,否则就会报错。
代码使用步骤
- 创建接口
- 创建Retrofit对象
- 获取创建的接口
- 调用接口里面的方法,获取Call
- 请求网络
String baseUrl = "http://apis.juhe.cn/ip/";
//1 创建retrogit对象
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseUrl)
.build();
//2 获取appUrl
AppUrl appUrl = retrofit.create(AppUrl.class);
//3 获取call
Call<String> call = appUrl.get3("192.168.1.12", "25de166737ce8c442bbcd70afc44f665");
//4 执行请求
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Logger.d("response=" + response.body().toString());
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Logger.d("message=" + t.getMessage() + "\n toString=" + t.toString() + "\n" + "code=" + t.hashCode());
if (t != null && t.getMessage().startsWith("Failed to connect")) { //Unable to resolve host
Logger.d("请检查网络是否畅通");
}
}
});
简单使用
先看Demo,再解释。
Demo下载地址:RetrofitDemo01
Step1:创建接口
接口里面是app的所有的请求方法,@GET @POST
代表是哪一种请求方式,@Path
+@Query
{占位符}和PATH只用在URL的path部分,url中的参数使用Query和QueryMap 代替,保证接口定义的简洁
public interface AppUrl {
//无参
@GET("check2")
Call<UpdateBean> get1();
//有参
@POST("ip2addr")
Call<IPBean> post1(@Query("ip") String ip, @Query("key") String key);
@GET("ip2addr")
Call<String> get3(@Query("ip") String ip, @Query("key") String key);
}
Step2:创建retrofit对象
addConverterFactory表示使用解析工厂
String url = "http://192.168.1.11:8080/QQ/";
//1 创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
Step3:获取创建的接口
获取我们创建的接口
//2 获取网络接口 AppUrl
AppUrl appUrl = retrofit.create(AppUrl.class);
Step4:调用接口里面的方法,获取Call
//3 调用AppUrl里面的方法获取call
Call<UpdateBean> call = appUrl.get1();
Step5:请求网络
call.enqueue(new Callback<UpdateBean>() {
@Override
public void onResponse(Call<UpdateBean> call, Response<UpdateBean> response) {
//response.body()就是泛型
UpdateBean bean = response.body();
Logger.d("id=" + bean.getId());
}
@Override
public void onFailure(Call<UpdateBean> call, Throwable t) {
Logger.d("message=" + t.getMessage() + "\n toString=" + t.toString());
}
});
ConverterFactory解析工厂
可以添加多种解析方式,
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();
请求失败的处理
@Override
public void onFailure(Call<String> call, Throwable t) {
Logger.d("message=" + t.getMessage() + "\n toString=" + t.toString() + "\n" + "code=" + t.hashCode());
if (t != null && t.getMessage().startsWith("Failed to connect")) { //Unable to resolve host
Logger.d("请检查网络是否畅通");
}
}
网络请求框架(一):android-async-http
网络请求框架(二):xUtils
网络请求框架(三):Volley
Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装