Retrofit是一个HTTP网络请求框架的封装,但是retrofit仅负责网络接口的封装,网络请求的操作实际上是有OkHttp完成的,话不多说,先上菜,实现基本的功能。 实现步骤: 1.添加依赖。 在项目Demo中的build.gradle下添加retrofit的依赖:
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
添加完后等同步完成后效果如下图所示:
2.添加gson
Gson是google自己写的一个java对象与JSON相互转化的工具包,特点轻巧简便,易于使用,而且有很完备的文档可供查询,同时也是一个开源项目。
因为我请求访问后服务器返回的是一个JSON格式的数据,所以就使用gson来解析返回的数据了,先在项目Demo中的build.gradle下添加gson的依赖:
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
添加完等同步完成后效果如下图所示:
3.创建json映射返回数据类
Json的数据格式为:
{
“Success”:”请求成功”
}
所以构建的类为:
public class Bean {
/**
*
* 网络请求返回的格式:
* {"Success":"请求成功"}
*/
@NonNull
@Override
public String toString() {
return "Success{" + Success + '}';
}
private String Success;
// private DemoBean demo;
public Bean(String success) {
this.Success = success;
}
public String getSuccess() {
return Success;
}
public void setSuccess(String success) {
this.Success = success;
}
}
在里面重写toString()方法,将返回数据输出为重写toString()方法的格式。
4.创建存放Url的常量类
public class Constans {
//设置默认超时时间
public static final int DEFAULT_TIME = 10;
//这里写入你请求的Url
public final static String BaseUrl = "";
//这里写入你请求的get方式
public final static String retrofit = "";
public final static String retrofitList = "";
public final static String retrofitPost = "";
}
里面的BaseUrl为自己需要请求的http接口,下面的retrofit和retrofitPost分别用于GET和POST请求。
5.创建用于描述网络请求的接口
Retrofit将Http请求抽象成java接口,使用注解的形式描述网络请求参数和配置网络请求参数。接口定义如下:
public interface ApiUrl {
/**
* 有效链接
*/
@GET(Constans.retrofit)
// Call<Bean> getRetrofit(@Query("lightNum") String lightNum, @Query("lightStatus")String lightStatus);
Call<Bean> getRetrofit();
@POST(Constans.retrofitPost)
Call<Bean> postRetrofit(@Query("lightNum") String lightNum, @Query("lightStatus")String lightStatus);
}
接口中分别定义的是GET和POST请求方式。
6.创建Retrofit实例-在MainActivity的方法中创建实例:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constans.BaseUrl)//设置网络请求的Url地址
.addConverterFactory(GsonConverterFactory.create())//设置gson数据解析器
.build();
7.开始发送请求-在MainActivity中编写开始发送请求方法,以下分别是GET和POST请求的例子:
GET请求:
ApiUrl api = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = api.getRetrofit();//开始对发送请求进行封装
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
Log.e(TAG,"请求成功信息:" + response.body().toString());//请求成功的信息处理,输出结果
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
}
});
POST请求:
ApiUrl apiUrl = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = apiUrl.postRetrofit("1","1");//设置POST请求参数
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
Log.e(TAG,"poet请求成功:" + response.body().toString());//请求成功的信息处理,输出结果
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
}
});
完整的GET和POST请求代码如下:
GET请求:
private void getRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constans.BaseUrl)//设置网络请求的Url地址
.addConverterFactory(GsonConverterFactory.create())//设置gson数据解析器
.build();
ApiUrl api = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = api.getRetrofit();//开始对发送请求进行封装
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
Log.e(TAG,"请求成功信息:" + response.body().toString());//请求成功的信息处理,输出结果
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
}
});
}
POST请求:
private void postRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constans.BaseUrl)//设置网络请求的Url地址
.addConverterFactory(GsonConverterFactory.create())//设置gson数据解析器
.build();
ApiUrl apiUrl = retrofit.create(ApiUrl.class);//创建网络接口请求的实例
Call<Bean> demo = apiUrl.postRetrofit("1","1");//设置POST请求参数
demo.enqueue(new Callback<Bean>() {//设置请求成功回调
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {//请求成功的回调
Log.e(TAG,"poet请求成功:" + response.body().toString());//请求成功的信息处理,输出结果
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {//请求失败的回调
Log.d(TAG,"请求失败信息:" + t.getMessage());//请求失败的信息处理,输出结果
}
});
}
8.添加权限
在AndroidManifest.xml下添加网络请求权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Android 9.0后会屏蔽掉http请求,需要在
<application></application>
下添加下面这个属性:
android:usesCleartextTraffic="true"
9.完结
最后可以在activity_main.xml中定义两个按钮,一个点击实现GET(getRetrofit方法)请求,另一个点击实现POST(postRetrofit方法)请求。 页面布局如下图所示:
在控制台打印的效果如下图所示: