|
|
E Connection closed:
E Error:
E 识别结果(长字符串): Client result ERROR
根据日志分析,问题出现在连接被意外关闭导致识别失败。以下是可能的原因和解决方案:
问题分析
连接提前关闭:从日志可以看到,在收到partial结果后连接立即被关闭
错误处理不完整:onClose 和 onError 方法中的错误处理可能不够完善
资源管理问题:连接关闭后没有正确处理后续操作
建议的解决方案
1. 改进 onMessage 方法
- @Override
- public void onMessage(String message) {
- Log.i(tag, "Received message: " + message);
-
- // 更新resultText以存储最新的识别结果
- if (message.contains("text") || message.contains("partial")) {
- try {
- JSONObject json = new JSONObject(message);
- if (json.has("text")) {
- resultText = json.getString("text");
- } else if (json.has("partial")) {
- resultText = json.getString("partial");
- }
- } catch (Exception e) {
- // 如果不是JSON格式,直接使用原始消息
- resultText = message;
- }
- }
-
- // 检查是否为EOF回执或其他重要消息
- if (message.contains("eof") || message.contains("result") ||
- message.contains("text") || message.contains("partial")) {
- if (mCallBack != null) {
- mCallBack.onGettingMsg(message);
- }
- }
- }
复制代码 2. 改进 onClose 方法
- @Override
- public void onClose(int code, String reason, boolean remote) {
- Log.e(tag, "Connection closed: " + reason + ", code: " + code);
- finished = true;
-
- // 确保文件流被关闭
- closeFileStream();
-
- // 只有当不是正常关闭时才调用错误回调
- if (mCallBack != null && code != 1000) { // 1000是正常关闭码
- mCallBack.onError("Connection closed: " + reason);
- }
- }
复制代码 3. 改进 sendAudioData 方法
- public void sendAudioData() {
- new Thread(() -> {
- try {
- Log.i(tag, "@@@@@@ 准备发送文件 @@@@@@");
- File audioFile = new File(audioFilePath);
- fileInputStream = new FileInputStream(audioFile);
- // 发送配置信息
- sendConfig();
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- Log.e(tag, "Sleep interrupted: " + e.getMessage());
- Thread.currentThread().interrupt();
- return;
- }
- int bufferSize = (int) (rate * 0.2 * 2);
- byte[] buffer = new byte[bufferSize];
- int bytesRead;
- while ((bytesRead = fileInputStream.read(buffer)) != -1 && !finished) {
- send(java.util.Arrays.copyOf(buffer, bytesRead));
- }
-
- // 只有在成功发送完数据后才发送EOF
- if (!finished) {
- sendEOF();
- Log.i(tag, "发送成功!");
- }
- } catch (IOException e){
- Log.e(tag, "File not found:" + e.getMessage());
- if (mCallBack != null) {
- mCallBack.onError("File error: " + e.getMessage());
- }
- } catch (Exception e) {
- Log.e(tag, "Error: " + e.getMessage());
- if (mCallBack != null) {
- mCallBack.onError("Send error: " + e.getMessage());
- }
- } finally {
- finished = true;
- closeFileStream();
- }
- }).start();
- }
复制代码 这些修改应该能解决连接提前关闭和结果获取不完整的问题。
|
|