|
|
@ -641,6 +641,103 @@ public class NetworkUtils { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 离场校验 (增强版,支持多种验证类型) |
|
|
|
* @param token 访问令牌 |
|
|
|
* @param type 验证类型 1验证码验证 2人脸验证 3扫码验证 4扫码器验证 |
|
|
|
* @param hardwareId 硬件ID |
|
|
|
* @param vCode 验证码(type=1时必需) |
|
|
|
* @param decryptText 解密文本(type=4时必需) |
|
|
|
* @param callback 回调接口 |
|
|
|
*/ |
|
|
|
public static void checkLeave(String token, int type, int hardwareId, String vCode, |
|
|
|
String decryptText, NetworkCallback<PadApiService.CheckLeaveResult> callback) { |
|
|
|
if (padApiService == null) { |
|
|
|
callback.onError(-1, "NetworkUtils未初始化,请先调用init()方法"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 创建请求体 |
|
|
|
PadApiService.CheckLeaveRequest request = new PadApiService.CheckLeaveRequest(); |
|
|
|
request.setToken(token); |
|
|
|
request.setType(type); |
|
|
|
request.setHardwareId(hardwareId); |
|
|
|
request.setVCode(vCode); |
|
|
|
request.setDecryptText(decryptText); |
|
|
|
|
|
|
|
callback.onStart(); |
|
|
|
padApiService.checkLeave(request).enqueue(new Callback<ApiResponse<PadApiService.CheckLeaveResult>>() { |
|
|
|
@Override |
|
|
|
public void onResponse(Call<ApiResponse<PadApiService.CheckLeaveResult>> call, |
|
|
|
Response<ApiResponse<PadApiService.CheckLeaveResult>> response) { |
|
|
|
try { |
|
|
|
if (response.isSuccessful() && response.body() != null) { |
|
|
|
ApiResponse<PadApiService.CheckLeaveResult> apiResponse = response.body(); |
|
|
|
|
|
|
|
if (apiResponse.isSuccess()) { |
|
|
|
callback.onSuccess(apiResponse.getData()); |
|
|
|
} else { |
|
|
|
// 当服务器有正确的返回时,如果code不为0,应该显示服务器返回的message,而不是使用自定义的错误信息 |
|
|
|
callback.onError(apiResponse.getCode(), apiResponse.getMessage()); |
|
|
|
} |
|
|
|
} else if (response.errorBody() != null) { |
|
|
|
// 尝试解析错误响应体中的JSON数据 |
|
|
|
try { |
|
|
|
String errorBody = response.errorBody().string(); |
|
|
|
ApiResponse<PadApiService.CheckLeaveResult> apiResponse = |
|
|
|
new com.google.gson.Gson().fromJson(errorBody, ApiResponse.class); |
|
|
|
if (apiResponse != null) { |
|
|
|
// 如果能成功解析API响应,根据code值处理 |
|
|
|
if (apiResponse.isSuccess()) { |
|
|
|
callback.onSuccess(apiResponse.getData()); |
|
|
|
} else { |
|
|
|
// 当服务器有正确的返回时,如果code不为0,应该显示服务器返回的message |
|
|
|
callback.onError(apiResponse.getCode(), apiResponse.getMessage()); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 无法解析为API响应格式,使用HTTP错误状态码 |
|
|
|
String errorMessage = getHttpErrorMessage(response.code()); |
|
|
|
android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); |
|
|
|
callback.onError(response.code(), errorMessage); |
|
|
|
} |
|
|
|
} catch (Exception parseException) { |
|
|
|
// JSON解析失败,使用HTTP错误状态码 |
|
|
|
String errorMessage = getHttpErrorMessage(response.code()); |
|
|
|
android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); |
|
|
|
callback.onError(response.code(), errorMessage); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 处理HTTP错误状态码,如404、500等 |
|
|
|
String errorMessage = getHttpErrorMessage(response.code()); |
|
|
|
if (response.code() == 502) { |
|
|
|
// 对于502错误,提供更具体的说明 |
|
|
|
errorMessage = "服务器暂时不可用,请稍后再试"; |
|
|
|
} |
|
|
|
android.util.Log.e("NetworkUtils", "HTTP Error: " + response.code() + " - " + errorMessage); |
|
|
|
callback.onError(response.code(), errorMessage); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
callback.onException(e); |
|
|
|
} finally { |
|
|
|
callback.onComplete(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onFailure(Call<ApiResponse<PadApiService.CheckLeaveResult>> call, Throwable t) { |
|
|
|
// 网络请求失败,记录详细日志并显示具体的错误信息 |
|
|
|
android.util.Log.e("NetworkUtils", "网络请求失败: " + t.getMessage(), t); |
|
|
|
// 显示具体的网络错误信息而不是笼统的"网络请求异常" |
|
|
|
String errorMessage = t.getMessage(); |
|
|
|
if (errorMessage == null || errorMessage.isEmpty()) { |
|
|
|
errorMessage = "网络请求失败"; |
|
|
|
} |
|
|
|
callback.onError(-1, "网络请求异常: " + errorMessage); |
|
|
|
callback.onComplete(); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据HTTP状态码获取错误信息 |
|
|
|
* @param httpCode HTTP状态码 |
|
|
|
* @return 错误信息 |
|
|
|