引言
在我们日常的android开发当中,往往需要用到android端和后台进行接口联调。但android端不可能等后台的接口完全做好之后再开始编写网络请求部分,而是大家一起讨论好数据结构之后便开始自行开发。这时候,android端要测试网络请求的话无非就是读取assets下的json文件或者直接通过gson把字符串转成类对象,而对于不同情况下的网络状态(连接失败、连接超时、登录失效...)只能一个一个手动的去进行修改代码,所以我就简单的封装了一下这个返回的过程,也就有了现在这篇文章了。(真的是超级简单,扩展的话后面再加啦)
代码
import android.text.TextUtils;
import android.util.Log;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
/**
* description :通过传入的json字符串来模拟真实的网络请求
* author : LongSh1z
* email : 2674461089@qq.com
* date : 2020/7/7 15:56
*/
public class SimulateRequest {
private static final String TAG = "SimulateRequest";
private static SimulateRequest instance;
public static SimulateRequest getInstance() {
instance = new SimulateRequest();
return instance;
}
/**
* 连接失败状态码
*/
public static int CODE_FAIL = 0;
/**
* 连接超时状态码
*/
public static int CODE_TIME_OUT = 1;
/**
* 连接超时成功状态码
*/
public static int CODE_TIME_OUT_SUCCESS = 2;
/**
* 登录信息过期状态码
*/
public static int CODE_UNLOGIN = 3;
/**
* 连接成功状态码
*/
public static int CODE_SUCCESS = 4;
/**
* 连接成功但是返回数据有误状态码
*/
public static int CODE_RETURN_FAIL = 5;
/**
* 网络请求回调
*/
public interface HttpCallBack {
void onResponse(String responseStr);
void onFail(int code, String errMsg);
}
/**
* 模拟真实的网络请求
*
* @param jsonStr
* @param httpCallBack
*/
public void sendRequest(final String jsonStr, final HttpCallBack httpCallBack) {
if (TextUtils.isEmpty(jsonStr)) {
throw new IllegalArgumentException("请传入有效的json字符串");
}
int randInt = new Random().nextInt(6);
//如果是连接失败
if (randInt == CODE_FAIL) {
Log.i(TAG, "----------sendRequest: 产生的随机数为-----" + randInt + "-----连接失败----------");
if (null != httpCallBack) {
httpCallBack.onFail(CODE_FAIL, "连接失败");
}
}
//如果是连接超时
else if (randInt == CODE_TIME_OUT) {
Log.i(TAG, "----------sendRequest: 产生的随机数为-----" + randInt + "-----连接超时----------");
final Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (null != httpCallBack) {
httpCallBack.onFail(CODE_TIME_OUT, "连接超时");
}
}
};
timer.schedule(task, 3000);
}
//如果是连接超时成功
else if (randInt == CODE_TIME_OUT_SUCCESS) {
Log.i(TAG, "----------sendRequest: 产生的随机数为-----" + randInt + "-----连接超时成功----------");
final Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (null != httpCallBack) {
httpCallBack.onResponse(jsonStr);
}
}
};
timer.schedule(task, 3000);
}
//如果是登录信息过期
else if (randInt == CODE_UNLOGIN) {
Log.i(TAG, "----------sendRequest: 产生的随机数为-----" + randInt + "-----登录信息过期----------");
if (null != httpCallBack){
httpCallBack.onFail(CODE_UNLOGIN, "登录信息过期");
}
}
//如果连接成功
else if (randInt == CODE_SUCCESS) {
Log.i(TAG, "----------sendRequest: 产生的随机数为-----" + randInt + "-----连接成功----------");
if (null != httpCallBack){
httpCallBack.onResponse(jsonStr);
}
}
//如果连接成功,但是返回有误
else {
Log.i(TAG, "----------sendRequest: 产生的随机数为-----" + randInt + "-----连接成功,但是返回有误----------");
if (null != httpCallBack){
httpCallBack.onResponse("");
}
}
}
}
扩展
现在的版本还是非常简单的,后面的扩展大家也可以多提提建议。预计后面的扩展会从可自行增加状态码,可自行修改每个状态码的权重,可自行配置sendRequest方法中的参数,比如超时时间、回调参数以及最后的代码性能优化入手,其他的意见大家也可以多讲讲哦。