4 changed files with 791 additions and 371 deletions
-
444app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java
-
307app/src/main/java/com/ouxuan/oxface/network/OrderVerificationManager.java
-
268app/src/main/java/com/ouxuan/oxface/network/OrderVerificationResultHandler.java
-
143网络请求模块重构说明.md
@ -0,0 +1,307 @@ |
|||
package com.ouxuan.oxface.network; |
|||
|
|||
import android.content.Context; |
|||
import com.ouxuan.oxface.data.DeviceSelectDataManager; |
|||
import com.ouxuan.oxface.data.LoginDataManager; |
|||
import com.ouxuan.oxface.network.api.PadApiService; |
|||
import com.ouxuan.oxface.network.callback.NetworkCallback; |
|||
import com.ouxuan.oxface.network.utils.NetworkUtils; |
|||
import com.ouxuan.oxface.utils.LogManager; |
|||
|
|||
/** |
|||
* 订单验证管理器 |
|||
* 封装所有订单验证相关的网络请求逻辑 |
|||
*/ |
|||
public class OrderVerificationManager { |
|||
|
|||
private static final String TAG = "OrderVerificationManager"; |
|||
|
|||
// 验证类型常量 |
|||
public static final int TYPE_VERIFICATION_CODE = 1; // 验证码验证 |
|||
public static final int TYPE_FACE_VERIFICATION = 2; // 人脸验证 |
|||
public static final int TYPE_SCAN_VERIFICATION = 3; // 扫码验证 |
|||
public static final int TYPE_SCANNER_VERIFICATION = 4; // 扫码器验证 |
|||
|
|||
private Context context; |
|||
private LoginDataManager loginDataManager; |
|||
private DeviceSelectDataManager deviceDataManager; |
|||
private OrderVerificationListener listener; |
|||
|
|||
/** |
|||
* 订单验证结果监听器 |
|||
*/ |
|||
public interface OrderVerificationListener { |
|||
/** |
|||
* 显示加载状态 |
|||
* @param message 加载消息 |
|||
*/ |
|||
void showLoadingStatus(String message); |
|||
|
|||
/** |
|||
* 隐藏加载状态 |
|||
*/ |
|||
void hideLoadingStatus(); |
|||
|
|||
/** |
|||
* 显示Toast消息 |
|||
* @param message 消息内容 |
|||
*/ |
|||
void showToast(String message); |
|||
|
|||
/** |
|||
* 验证成功回调 |
|||
* @param data 返回的数据 |
|||
* @param verificationType 验证类型 |
|||
*/ |
|||
void onVerificationSuccess(PadApiService.CheckOrderResult data, int verificationType); |
|||
|
|||
/** |
|||
* 验证失败回调 |
|||
* @param errorCode 错误码 |
|||
* @param errorMessage 错误信息 |
|||
* @param verificationType 验证类型 |
|||
*/ |
|||
void onVerificationError(int errorCode, String errorMessage, int verificationType); |
|||
|
|||
/** |
|||
* 验证异常回调 |
|||
* @param throwable 异常信息 |
|||
* @param verificationType 验证类型 |
|||
*/ |
|||
void onVerificationException(Throwable throwable, int verificationType); |
|||
} |
|||
|
|||
/** |
|||
* 构造方法 |
|||
* @param context 上下文 |
|||
* @param listener 结果监听器 |
|||
*/ |
|||
public OrderVerificationManager(Context context, OrderVerificationListener listener) { |
|||
this.context = context; |
|||
this.listener = listener; |
|||
this.loginDataManager = LoginDataManager.getInstance(context); |
|||
this.deviceDataManager = DeviceSelectDataManager.getInstance(context); |
|||
} |
|||
|
|||
/** |
|||
* 执行订单验证 |
|||
* @param verificationType 验证类型 |
|||
* @param verifyCode 验证码或人脸base64数据 |
|||
* @param decryptText 解密文本(仅扫码器验证使用) |
|||
*/ |
|||
public void performVerification(int verificationType, String verifyCode, String decryptText) { |
|||
LogManager.logInfo(TAG, "开始执行订单验证,类型: " + verificationType); |
|||
|
|||
// 获取认证信息 |
|||
String token = getAuthToken(); |
|||
int hardwareId = getHardwareId(); |
|||
|
|||
// 参数校验 |
|||
if (!validateParams(token, hardwareId)) { |
|||
return; |
|||
} |
|||
|
|||
// 根据验证类型执行相应的验证 |
|||
switch (verificationType) { |
|||
case TYPE_VERIFICATION_CODE: |
|||
performVerificationCodeCheck(token, hardwareId, verifyCode); |
|||
break; |
|||
case TYPE_FACE_VERIFICATION: |
|||
performFaceCheck(token, hardwareId, verifyCode); |
|||
break; |
|||
case TYPE_SCAN_VERIFICATION: |
|||
performScanCheck(token, hardwareId); |
|||
break; |
|||
case TYPE_SCANNER_VERIFICATION: |
|||
performScannerCheck(token, hardwareId, decryptText); |
|||
break; |
|||
default: |
|||
LogManager.logError(TAG, "不支持的验证类型: " + verificationType); |
|||
if (listener != null) { |
|||
listener.showToast("不支持的验证类型"); |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 验证码验证 |
|||
*/ |
|||
private void performVerificationCodeCheck(String token, int hardwareId, String verifyCode) { |
|||
LogManager.logInfo(TAG, "执行验证码验证,验证码: " + verifyCode); |
|||
|
|||
if (verifyCode == null || verifyCode.isEmpty()) { |
|||
LogManager.logError(TAG, "验证码为空"); |
|||
if (listener != null) { |
|||
listener.showToast("请输入验证码"); |
|||
} |
|||
return; |
|||
} |
|||
|
|||
// 显示加载状态 |
|||
if (listener != null) { |
|||
listener.showLoadingStatus("正在验证验证码..."); |
|||
} |
|||
|
|||
// 调用网络请求 |
|||
NetworkUtils.checkOrder( |
|||
token, TYPE_VERIFICATION_CODE, hardwareId, verifyCode, null, null, null, |
|||
createNetworkCallback(TYPE_VERIFICATION_CODE) |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* 人脸验证 |
|||
*/ |
|||
private void performFaceCheck(String token, int hardwareId, String faceBase64) { |
|||
LogManager.logInfo(TAG, "执行人脸验证"); |
|||
|
|||
if (faceBase64 == null || faceBase64.isEmpty()) { |
|||
LogManager.logError(TAG, "人脸数据为空"); |
|||
if (listener != null) { |
|||
listener.showToast("未检测到有效的人脸数据"); |
|||
} |
|||
return; |
|||
} |
|||
|
|||
// 显示加载状态 |
|||
if (listener != null) { |
|||
listener.showLoadingStatus("正在进行人脸验证..."); |
|||
} |
|||
|
|||
// 调用网络请求 |
|||
NetworkUtils.checkOrder( |
|||
token, TYPE_FACE_VERIFICATION, hardwareId, null, faceBase64, "face_base64", null, |
|||
createNetworkCallback(TYPE_FACE_VERIFICATION) |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* 扫码验证 |
|||
*/ |
|||
private void performScanCheck(String token, int hardwareId) { |
|||
LogManager.logInfo(TAG, "执行扫码验证"); |
|||
|
|||
// 显示加载状态 |
|||
if (listener != null) { |
|||
listener.showLoadingStatus("正在进行扫码验证..."); |
|||
} |
|||
|
|||
// 调用网络请求 |
|||
NetworkUtils.checkOrder( |
|||
token, TYPE_SCAN_VERIFICATION, hardwareId, null, null, null, null, |
|||
createNetworkCallback(TYPE_SCAN_VERIFICATION) |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* 扫码器验证 |
|||
*/ |
|||
private void performScannerCheck(String token, int hardwareId, String decryptText) { |
|||
LogManager.logInfo(TAG, "执行扫码器验证"); |
|||
|
|||
// 显示加载状态 |
|||
if (listener != null) { |
|||
listener.showLoadingStatus("正在进行扫码器验证..."); |
|||
} |
|||
|
|||
// 调用网络请求 |
|||
NetworkUtils.checkOrder( |
|||
token, TYPE_SCANNER_VERIFICATION, hardwareId, null, null, null, decryptText, |
|||
createNetworkCallback(TYPE_SCANNER_VERIFICATION) |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* 创建网络请求回调 |
|||
*/ |
|||
private NetworkCallback<PadApiService.CheckOrderResult> createNetworkCallback(int verificationType) { |
|||
return new NetworkCallback<PadApiService.CheckOrderResult>() { |
|||
@Override |
|||
public void onSuccess(PadApiService.CheckOrderResult data) { |
|||
LogManager.logInfo(TAG, "验证成功,类型: " + verificationType); |
|||
if (listener != null) { |
|||
listener.onVerificationSuccess(data, verificationType); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onError(int errorCode, String errorMessage) { |
|||
LogManager.logError(TAG, "验证失败,类型: " + verificationType + ", 错误码: " + errorCode + ", 错误信息: " + errorMessage); |
|||
if (listener != null) { |
|||
listener.onVerificationError(errorCode, errorMessage, verificationType); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onException(Throwable throwable) { |
|||
LogManager.logError(TAG, "验证异常,类型: " + verificationType, throwable); |
|||
if (listener != null) { |
|||
listener.onVerificationException(throwable, verificationType); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onComplete() { |
|||
if (listener != null) { |
|||
listener.hideLoadingStatus(); |
|||
} |
|||
} |
|||
}; |
|||
} |
|||
|
|||
/** |
|||
* 获取认证Token |
|||
*/ |
|||
private String getAuthToken() { |
|||
return loginDataManager.getAuthToken(); |
|||
} |
|||
|
|||
/** |
|||
* 获取硬件ID |
|||
*/ |
|||
private int getHardwareId() { |
|||
return deviceDataManager.getSelectedHardwareId(); |
|||
} |
|||
|
|||
/** |
|||
* 验证参数 |
|||
*/ |
|||
private boolean validateParams(String token, int hardwareId) { |
|||
if (token == null || token.isEmpty()) { |
|||
LogManager.logError(TAG, "获取token失败"); |
|||
if (listener != null) { |
|||
listener.showToast("获取token失败"); |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
if (hardwareId <= 0) { |
|||
LogManager.logError(TAG, "获取hardwareId失败"); |
|||
if (listener != null) { |
|||
listener.showToast("获取设备ID失败"); |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
|
|||
/** |
|||
* 获取验证类型描述 |
|||
*/ |
|||
public static String getVerificationTypeDescription(int verificationType) { |
|||
switch (verificationType) { |
|||
case TYPE_VERIFICATION_CODE: |
|||
return "验证码验证"; |
|||
case TYPE_FACE_VERIFICATION: |
|||
return "人脸验证"; |
|||
case TYPE_SCAN_VERIFICATION: |
|||
return "扫码验证"; |
|||
case TYPE_SCANNER_VERIFICATION: |
|||
return "扫码器验证"; |
|||
default: |
|||
return "未知验证类型"; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,268 @@ |
|||
package com.ouxuan.oxface.network; |
|||
|
|||
import android.content.Intent; |
|||
import android.content.Context; |
|||
import com.ouxuan.oxface.network.api.PadApiService; |
|||
import com.ouxuan.oxface.orderOX.OrderVerificationResultActivity; |
|||
import com.ouxuan.oxface.utils.LogManager; |
|||
import com.google.gson.JsonObject; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
import java.util.ArrayList; |
|||
|
|||
/** |
|||
* 订单验证结果处理器 |
|||
* 处理不同类型验证的结果,包括页面跳转和数据处理 |
|||
*/ |
|||
public class OrderVerificationResultHandler { |
|||
|
|||
private static final String TAG = "OrderVerificationResultHandler"; |
|||
|
|||
private Context context; |
|||
private OrderVerificationResultListener listener; |
|||
|
|||
/** |
|||
* 订单验证结果处理监听器 |
|||
*/ |
|||
public interface OrderVerificationResultListener { |
|||
/** |
|||
* 显示Toast消息 |
|||
* @param message 消息内容 |
|||
*/ |
|||
void showToast(String message); |
|||
|
|||
/** |
|||
* 跳转到订单验证结果页面 |
|||
* @param intent 跳转意图 |
|||
*/ |
|||
void navigateToResultPage(Intent intent); |
|||
|
|||
/** |
|||
* 跳转到订单选择页面 |
|||
* @param queryData 查询数据 |
|||
*/ |
|||
void navigateToOrderSelectionPage(Map<String, Object> queryData); |
|||
} |
|||
|
|||
/** |
|||
* 构造方法 |
|||
* @param context 上下文 |
|||
* @param listener 结果监听器 |
|||
*/ |
|||
public OrderVerificationResultHandler(Context context, OrderVerificationResultListener listener) { |
|||
this.context = context; |
|||
this.listener = listener; |
|||
} |
|||
|
|||
/** |
|||
* 处理验证成功结果 |
|||
* @param data 返回的数据 |
|||
* @param verificationType 验证类型 |
|||
*/ |
|||
public void handleVerificationSuccess(PadApiService.CheckOrderResult data, int verificationType) { |
|||
LogManager.logInfo(TAG, "处理验证成功结果,类型: " + verificationType); |
|||
|
|||
if (data == null || data.getResult() == null || data.getResult().isEmpty()) { |
|||
LogManager.logWarning(TAG, "返回数据为空"); |
|||
if (listener != null) { |
|||
listener.showToast("未找到可核销的订单"); |
|||
} |
|||
return; |
|||
} |
|||
|
|||
switch (verificationType) { |
|||
case OrderVerificationManager.TYPE_VERIFICATION_CODE: |
|||
case OrderVerificationManager.TYPE_SCANNER_VERIFICATION: |
|||
handleDirectResultTypes(data, verificationType); |
|||
break; |
|||
case OrderVerificationManager.TYPE_FACE_VERIFICATION: |
|||
handleFaceVerificationResult(data); |
|||
break; |
|||
case OrderVerificationManager.TYPE_SCAN_VERIFICATION: |
|||
handleScanVerificationResult(data); |
|||
break; |
|||
default: |
|||
LogManager.logWarning(TAG, "未知的验证类型: " + verificationType); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 处理验证失败结果 |
|||
* @param errorCode 错误码 |
|||
* @param errorMessage 错误信息 |
|||
* @param verificationType 验证类型 |
|||
*/ |
|||
public void handleVerificationError(int errorCode, String errorMessage, int verificationType) { |
|||
LogManager.logError(TAG, "处理验证失败结果,类型: " + verificationType + ", 错误码: " + errorCode + ", 错误信息: " + errorMessage); |
|||
|
|||
// 当人脸验证返回303错误码时,不显示任何提示 |
|||
if (verificationType == OrderVerificationManager.TYPE_FACE_VERIFICATION && errorCode == 303) { |
|||
LogManager.logInfo(TAG, "人脸验证返回303,不显示提示"); |
|||
return; |
|||
} |
|||
|
|||
String displayMessage = getDisplayErrorMessage(errorCode, errorMessage); |
|||
|
|||
if (verificationType == OrderVerificationManager.TYPE_SCANNER_VERIFICATION) { |
|||
if (listener != null) { |
|||
listener.showToast(displayMessage != null && !displayMessage.isEmpty() ? displayMessage : "核销码不可用!"); |
|||
} |
|||
LogManager.logInfo(TAG, "扫码器验证失败,准备返回上一页"); |
|||
|
|||
} else if (verificationType == OrderVerificationManager.TYPE_SCAN_VERIFICATION && "抱歉! 暂无可核销订单".equals(errorMessage)) { |
|||
if (listener != null) { |
|||
listener.showToast(displayMessage); |
|||
} |
|||
|
|||
// 准备订单核销选择页信息 |
|||
Map<String, Object> queryData = new HashMap<>(); |
|||
queryData.put("type", verificationType); |
|||
queryData.put("result", new ArrayList<>()); |
|||
|
|||
LogManager.logInfo(TAG, "暂无可核销订单,准备跳转到订单验证页面: " + queryData.toString()); |
|||
if (listener != null) { |
|||
listener.navigateToOrderSelectionPage(queryData); |
|||
} |
|||
|
|||
} else { |
|||
if (listener != null) { |
|||
listener.showToast(displayMessage != null && !displayMessage.isEmpty() ? displayMessage : "验证失败"); |
|||
} |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 处理验证异常结果 |
|||
* @param throwable 异常信息 |
|||
* @param verificationType 验证类型 |
|||
*/ |
|||
public void handleVerificationException(Throwable throwable, int verificationType) { |
|||
LogManager.logError(TAG, "处理验证异常结果,类型: " + verificationType, throwable); |
|||
if (listener != null) { |
|||
listener.showToast("网络请求异常: " + throwable.getMessage()); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 处理直接跳转结果页面的验证类型(验证码验证、扫码器验证) |
|||
*/ |
|||
private void handleDirectResultTypes(PadApiService.CheckOrderResult data, int verificationType) { |
|||
if (listener != null) { |
|||
listener.showToast("操作成功,正在跳转..."); |
|||
} |
|||
|
|||
PadApiService.CheckOrderItem firstItem = data.getResult().get(0); |
|||
|
|||
// 创建跳转到OrderVerificationResultActivity的Intent |
|||
Intent intent = new Intent(context, OrderVerificationResultActivity.class); |
|||
intent.putExtra("verification_type", verificationType); |
|||
intent.putExtra("order_no", firstItem.getOrderNo()); |
|||
intent.putExtra("verification_code", firstItem.getVCode() != null && !firstItem.getVCode().isEmpty() ? |
|||
firstItem.getVCode().get(0) : ""); |
|||
intent.putExtra("order_type", firstItem.getOrderType()); |
|||
|
|||
// 处理info字段,获取卡号 |
|||
String cardNo = extractCardNumber(firstItem.getInfo()); |
|||
intent.putExtra("card_no", cardNo); |
|||
intent.putExtra("status", "核销成功"); // 可以根据实际情况设置状态 |
|||
|
|||
LogManager.logInfo(TAG, "准备跳转到验证结果页面,订单号: " + firstItem.getOrderNo()); |
|||
|
|||
if (listener != null) { |
|||
listener.navigateToResultPage(intent); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 处理人脸验证结果 |
|||
*/ |
|||
private void handleFaceVerificationResult(PadApiService.CheckOrderResult data) { |
|||
// 准备订单核销选择页信息 |
|||
Map<String, Object> queryData = new HashMap<>(); |
|||
queryData.put("type", OrderVerificationManager.TYPE_FACE_VERIFICATION); |
|||
queryData.put("check_type", "face_base64"); |
|||
queryData.put("result", data.getResult()); |
|||
|
|||
LogManager.logInfo(TAG, "准备跳转到订单验证页面: " + queryData.toString()); |
|||
if (listener != null) { |
|||
listener.showToast("人脸验证成功,准备跳转到订单选择页面"); |
|||
listener.navigateToOrderSelectionPage(queryData); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 处理扫码验证结果 |
|||
*/ |
|||
private void handleScanVerificationResult(PadApiService.CheckOrderResult data) { |
|||
if (listener != null) { |
|||
listener.showToast("操作成功,正在跳转..."); |
|||
} |
|||
|
|||
// 准备订单核销选择页信息 |
|||
Map<String, Object> queryData = new HashMap<>(); |
|||
queryData.put("type", OrderVerificationManager.TYPE_SCAN_VERIFICATION); |
|||
queryData.put("result", data.getResult()); |
|||
|
|||
LogManager.logInfo(TAG, "准备跳转到订单验证页面: " + queryData.toString()); |
|||
if (listener != null) { |
|||
listener.navigateToOrderSelectionPage(queryData); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 从info对象中提取卡号 |
|||
*/ |
|||
private String extractCardNumber(Object info) { |
|||
String cardNo = ""; |
|||
if (info != null) { |
|||
if (info instanceof String) { |
|||
// 如果info是字符串,直接使用 |
|||
cardNo = (String) info; |
|||
} else if (info instanceof PadApiService.OrderInfo) { |
|||
// 如果info是OrderInfo对象,获取userId |
|||
PadApiService.OrderInfo orderInfo = (PadApiService.OrderInfo) info; |
|||
cardNo = orderInfo.getUserId() != null ? orderInfo.getUserId() : ""; |
|||
} else if (info instanceof JsonObject) { |
|||
// 如果info是JsonObject,尝试获取card_no字段 |
|||
JsonObject jsonObject = (JsonObject) info; |
|||
if (jsonObject.has("card_no")) { |
|||
cardNo = jsonObject.get("card_no").getAsString(); |
|||
} |
|||
} |
|||
} |
|||
return cardNo; |
|||
} |
|||
|
|||
/** |
|||
* 获取显示的错误信息 |
|||
*/ |
|||
private String getDisplayErrorMessage(int errorCode, String errorMessage) { |
|||
// 当服务器有正确的返回时,如果code不为0,应该显示服务器返回的message |
|||
String displayMessage = errorMessage; |
|||
|
|||
// 只有在错误信息为空或null时,才使用默认的错误信息 |
|||
if (errorMessage == null || errorMessage.isEmpty()) { |
|||
switch (errorCode) { |
|||
case 404: |
|||
displayMessage = "请求的资源未找到"; |
|||
break; |
|||
case 500: |
|||
displayMessage = "服务器内部错误"; |
|||
break; |
|||
case 401: |
|||
displayMessage = "认证失败,请重新登录"; |
|||
break; |
|||
case 403: |
|||
displayMessage = "权限不足,无法访问"; |
|||
break; |
|||
default: |
|||
displayMessage = "请求失败,错误码: " + errorCode; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
return displayMessage; |
|||
} |
|||
} |
@ -0,0 +1,143 @@ |
|||
# 网络请求模块重构说明 |
|||
|
|||
## 概述 |
|||
|
|||
原先在 `OXFaceOnlineActivity.java` 中的网络请求代码过于冗杂,现已重构为两个独立的管理类: |
|||
|
|||
1. **OrderVerificationManager** - 负责执行各种类型的订单验证网络请求 |
|||
2. **OrderVerificationResultHandler** - 负责处理验证结果,包括成功、失败和异常情况 |
|||
|
|||
## 重构后的架构 |
|||
|
|||
### 1. OrderVerificationManager(订单验证管理器) |
|||
|
|||
**功能:** |
|||
- 封装所有订单验证相关的网络请求逻辑 |
|||
- 支持4种验证类型:验证码验证、人脸验证、扫码验证、扫码器验证 |
|||
- 统一的参数校验和错误处理 |
|||
|
|||
**主要方法:** |
|||
```java |
|||
// 执行验证 |
|||
void performVerification(int verificationType, String verifyCode, String decryptText) |
|||
|
|||
// 验证类型常量 |
|||
TYPE_VERIFICATION_CODE = 1 // 验证码验证 |
|||
TYPE_FACE_VERIFICATION = 2 // 人脸验证 |
|||
TYPE_SCAN_VERIFICATION = 3 // 扫码验证 |
|||
TYPE_SCANNER_VERIFICATION = 4 // 扫码器验证 |
|||
``` |
|||
|
|||
### 2. OrderVerificationResultHandler(订单验证结果处理器) |
|||
|
|||
**功能:** |
|||
- 处理不同验证类型的成功结果 |
|||
- 统一的错误处理和异常处理 |
|||
- 页面跳转逻辑封装 |
|||
|
|||
**主要方法:** |
|||
```java |
|||
// 处理验证成功 |
|||
void handleVerificationSuccess(CheckOrderResult data, int verificationType) |
|||
|
|||
// 处理验证失败 |
|||
void handleVerificationError(int errorCode, String errorMessage, int verificationType) |
|||
|
|||
// 处理验证异常 |
|||
void handleVerificationException(Throwable throwable, int verificationType) |
|||
``` |
|||
|
|||
## 使用方式 |
|||
|
|||
### 在 Activity 中的使用 |
|||
|
|||
```java |
|||
public class OXFaceOnlineActivity extends BaseActivity { |
|||
|
|||
private OrderVerificationManager orderVerificationManager; |
|||
private OrderVerificationResultHandler orderVerificationResultHandler; |
|||
|
|||
@Override |
|||
protected void onCreate(Bundle savedInstanceState) { |
|||
super.onCreate(savedInstanceState); |
|||
// ... 其他初始化代码 ... |
|||
|
|||
// 初始化网络请求管理器 |
|||
initNetworkManagers(); |
|||
} |
|||
|
|||
/** |
|||
* 初始化网络请求管理器 |
|||
*/ |
|||
private void initNetworkManagers() { |
|||
// 初始化验证管理器 |
|||
orderVerificationManager = new OrderVerificationManager(this, |
|||
new OrderVerificationManager.OrderVerificationListener() { |
|||
// 实现回调接口 |
|||
}); |
|||
|
|||
// 初始化结果处理器 |
|||
orderVerificationResultHandler = new OrderVerificationResultHandler(this, |
|||
new OrderVerificationResultHandler.OrderVerificationResultListener() { |
|||
// 实现回调接口 |
|||
}); |
|||
} |
|||
|
|||
/** |
|||
* 执行订单验证(简化后的方法) |
|||
*/ |
|||
private void getCheckOrder() { |
|||
// 使用新的网络请求管理器执行验证 |
|||
orderVerificationManager.performVerification(modeType, verifyCode, null); |
|||
} |
|||
} |
|||
``` |
|||
|
|||
## 重构优势 |
|||
|
|||
### 1. 代码组织更清晰 |
|||
- **分离关注点**:网络请求逻辑与UI逻辑完全分离 |
|||
- **模块化设计**:每个类都有明确的职责 |
|||
- **易于维护**:修改网络请求逻辑不影响UI代码 |
|||
|
|||
### 2. 复用性更强 |
|||
- **独立封装**:网络请求管理器可以在其他Activity中复用 |
|||
- **接口设计**:通过监听器接口实现松耦合 |
|||
- **配置灵活**:可以轻松适配不同的UI需求 |
|||
|
|||
### 3. 错误处理更统一 |
|||
- **集中处理**:所有网络请求的错误处理逻辑集中在一个地方 |
|||
- **类型安全**:使用常量定义验证类型,避免魔法数字 |
|||
- **异常管理**:统一的异常处理机制 |
|||
|
|||
### 4. 测试更容易 |
|||
- **单一职责**:每个类的功能单一,便于单元测试 |
|||
- **依赖注入**:通过接口注入依赖,便于Mock测试 |
|||
- **逻辑清晰**:网络请求逻辑独立,便于测试覆盖 |
|||
|
|||
## 文件说明 |
|||
|
|||
### 新增文件: |
|||
1. `OrderVerificationManager.java` - 订单验证管理器 |
|||
2. `OrderVerificationResultHandler.java` - 订单验证结果处理器 |
|||
3. `网络请求模块重构说明.md` - 本文档 |
|||
|
|||
### 修改文件: |
|||
1. `OXFaceOnlineActivity.java` - 简化网络请求相关代码,使用新的封装类 |
|||
|
|||
### 删除的方法: |
|||
- `handleVerificationCodeCheck()` - 验证码验证处理 |
|||
- `handleFaceCheck()` - 人脸验证处理 |
|||
- `handleScanCheck()` - 扫码验证处理 |
|||
- `handleScannerCheck()` - 扫码器验证处理 |
|||
- `handleCheckOrderSuccess()` - 成功结果处理 |
|||
- `handleCheckOrderError()` - 错误结果处理 |
|||
|
|||
这些方法的功能现在都由新的封装类提供,代码更加模块化和可维护。 |
|||
|
|||
## 后续优化建议 |
|||
|
|||
1. **添加缓存机制**:对验证结果进行缓存,提高性能 |
|||
2. **添加重试机制**:网络失败时自动重试 |
|||
3. **添加请求队列**:管理并发请求 |
|||
4. **添加配置文件**:将网络请求相关配置外部化 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue