From 299e9ecd5565d6063c68453f2f86d9413acf8a0a Mon Sep 17 00:00:00 2001 From: MT <3075067877@qq.com> Date: Sat, 13 Sep 2025 16:58:50 +0800 Subject: [PATCH] fix 2 --- .../com/ouxuan/oxface/abgate/ABGateManager.java | 41 +++++------------- .../ouxuan/oxface/abgate/ABGateUsageExample.java | 48 +++++++++++++--------- 2 files changed, 39 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/abgate/ABGateManager.java b/app/src/main/java/com/ouxuan/oxface/abgate/ABGateManager.java index bfea2c1..455d765 100644 --- a/app/src/main/java/com/ouxuan/oxface/abgate/ABGateManager.java +++ b/app/src/main/java/com/ouxuan/oxface/abgate/ABGateManager.java @@ -200,17 +200,11 @@ public class ABGateManager { public boolean ABPeopleCheck() { LogManager.logInfo(TAG, "执行AB门内人数检查"); - if (callback == null) { - LogManager.logError(TAG, "ABPeopleCheck回调参数为空"); - return; - } - // 检查485是否启用 if (!ox485.isGateCamera485OxOn()) { String errorMsg = "485摄像头模式未启用"; LogManager.logError(TAG, errorMsg); - callback.onError(errorMsg); - return; + throw new RuntimeException(errorMsg); } try { @@ -219,6 +213,9 @@ public class ABGateManager { String sceneType = isLeaveScene ? "离场" : "进场"; LogManager.logInfo(TAG, "当前场景类型: " + sceneType); + // 创建超时控制的CompletableFuture + CompletableFuture peopleCheckFuture = new CompletableFuture<>(); + // 异步获取485人数 ox485.sendHex485ForPeopleNum(new Ox485.PeopleNumCallback() { @Override @@ -241,41 +238,25 @@ public class ABGateManager { } LogManager.logInfo(TAG, "人数检查结果: " + checkResult); - - final boolean result = peopleCheckPassed; - mainHandler.post(new Runnable() { - @Override - public void run() { - callback.onSuccess(result); - } - }); + peopleCheckFuture.complete(peopleCheckPassed); } @Override public void onError(String errorMessage) { LogManager.logError(TAG, "485人数获取失败: " + errorMessage); - mainHandler.post(new Runnable() { - @Override - public void run() { - callback.onError("485人数获取失败: " + errorMessage); - } - }); + peopleCheckFuture.completeExceptionally(new RuntimeException("485人数获取失败: " + errorMessage)); } }); - // 设置超时处理 - mainHandler.postDelayed(new Runnable() { - @Override - public void run() { - LogManager.logError(TAG, "人数检查超时"); - callback.onError("人数检查超时"); - } - }, PEOPLE_CHECK_TIMEOUT); + // 同步等待结果,设置超时 + boolean result = peopleCheckFuture.get(PEOPLE_CHECK_TIMEOUT, TimeUnit.MILLISECONDS); + LogManager.logInfo(TAG, "人数检查完成,结果: " + result); + return result; } catch (Exception e) { String errorMsg = "人数检查异常: " + e.getMessage(); LogManager.logError(TAG, errorMsg, e); - callback.onError(errorMsg); + throw new RuntimeException(errorMsg); } } diff --git a/app/src/main/java/com/ouxuan/oxface/abgate/ABGateUsageExample.java b/app/src/main/java/com/ouxuan/oxface/abgate/ABGateUsageExample.java index c761a43..f6390c6 100644 --- a/app/src/main/java/com/ouxuan/oxface/abgate/ABGateUsageExample.java +++ b/app/src/main/java/com/ouxuan/oxface/abgate/ABGateUsageExample.java @@ -95,17 +95,21 @@ public class ABGateUsageExample { public void checkGateStatusOnly() { LogManager.logInfo(TAG, "单独执行门状态检查"); - abGateManager.ABGateCheck(new ABGateManager.ABGateCheckCallback() { - @Override - public void onSuccess(boolean gateAvailable) { - LogManager.logInfo(TAG, "门状态检查结果: " + (gateAvailable ? "门已关闭,可用" : "门未完全关闭,不可用")); - } - - @Override - public void onError(String errorMessage) { - LogManager.logError(TAG, "门状态检查失败: " + errorMessage); + // 在后台线程中调用同步方法 + new Thread(() -> { + try { + boolean gateAvailable = abGateManager.ABGateCheck(); + String result = gateAvailable ? "门已关闭,可用" : "门未完全关闭,不可用"; + + android.os.Handler mainHandler = new android.os.Handler(android.os.Looper.getMainLooper()); + mainHandler.post(() -> { + LogManager.logInfo(TAG, "门状态检查结果: " + result); + }); + + } catch (Exception e) { + LogManager.logError(TAG, "门状态检查异常: " + e.getMessage(), e); } - }); + }).start(); } /** @@ -114,17 +118,21 @@ public class ABGateUsageExample { public void checkPeopleCountOnly() { LogManager.logInfo(TAG, "单独执行人数检查"); - abGateManager.ABPeopleCheck(new ABGateManager.ABGateCheckCallback() { - @Override - public void onSuccess(boolean peopleCheckPassed) { - LogManager.logInfo(TAG, "人数检查结果: " + (peopleCheckPassed ? "人数符合要求" : "人数不符合要求")); - } - - @Override - public void onError(String errorMessage) { - LogManager.logError(TAG, "人数检查失败: " + errorMessage); + // 在后台线程中调用同步方法 + new Thread(() -> { + try { + boolean peopleCheckPassed = abGateManager.ABPeopleCheck(); + String result = peopleCheckPassed ? "人数符合要求" : "人数不符合要求"; + + android.os.Handler mainHandler = new android.os.Handler(android.os.Looper.getMainLooper()); + mainHandler.post(() -> { + LogManager.logInfo(TAG, "人数检查结果: " + result); + }); + + } catch (Exception e) { + LogManager.logError(TAG, "人数检查异常: " + e.getMessage(), e); } - }); + }).start(); } /**