You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin语音识别EditText显示null问题求助

问题分析与解决方案

核心问题:语音识别结果获取API错误

RecognizerIntent.EXTRA_RESULTS返回的是ArrayList<String>类型的结果,而非String[]数组。你当前使用getStringArrayExtra()获取结果,会导致result始终为null,最终显示"null"字符串。

修复步骤:

  1. 修正结果获取方式
    将获取结果的代码替换为getStringArrayListExtra():

    val result = data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
    
  2. 优化空安全与文本更新逻辑
    避免当result为空时显示"null",同时简化无效的长度判断:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RQ_SPEECH_REC && resultCode == Activity.RESULT_OK){
            val result = data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
            val speechText = result?.firstOrNull() ?: return // 如果结果为空,直接返回不更新
            
            if (text.text.isNullOrEmpty()) {
                text.setText(speechText)
            } else {
                text.append(" $speechText") // 添加空格分隔连续语音输入
            }
        }
    }
    
  3. 额外优化点

    • 移除冗余的text.editableText.toString()拼接:append()方法可直接接收字符串,无需手动转换为Editable
    • 若后续适配Android新版本,可将startActivityForResult替换为registerForActivityResult,但不影响当前问题修复

完整修复后的onActivityResult代码:

@Suppress("DEPRECATION")
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == RQ_SPEECH_REC && resultCode == Activity.RESULT_OK){
        val result = data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
        val speechText = result?.firstOrNull() ?: return
        
        if (text.text.isNullOrEmpty()) {
            text.setText(speechText)
        } else {
            text.append(" $speechText")
        }
    }
}

验证点:

  • 确保设备语音识别功能正常(可通过系统自带语音输入测试)
  • 清单文件已添加RECORD_AUDIO权限(你已确认配置正确)

内容的提问来源于stack exchange,提问作者Camp Nerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:40:41