You need to enable JavaScript to run this app. WebView文件上传开发中,为何重写onShowFileChooser提示未覆盖任何方法?
优惠活动
大模型
产品
解决方案
定价
更多

WebView文件上传开发中,为何重写onShowFileChooser提示未覆盖任何方法?

onShowFileChooser重写报错排查方案

核心报错逻辑

提示“未覆盖任何父类方法”的本质,是你编写的方法和父类WebChromeClient中的同名方法不构成重写关系,常见触发场景有三类:

  • 方法签名不匹配
    父类WebChromeClient中onShowFileChooser的定义要求三个参数完全对应匹配,常见不匹配情况:
    • 将可空参数写为非空类型:你当前代码里把第三个参数fcp: FileChooserParams声明为非空,Kotlin编译器会直接判定这是一个和父类完全无关的新方法,不识别为重写
    • 导入类错误:如果引入的FileChooserParams不是android.webkit.WebChromeClient.FileChooserParams,而是其他同名类,参数类型和父类定义不一致,也会导致重写识别失效
    • 参数顺序和父类定义不一致
  • 版本阈值不满足
    该方法是Android 5.0(API 21)才加入WebChromeClient的公开API,如果项目配置的minSdkVersion低于21,编译阶段的类定义中根本不存在这个方法,自然无法覆盖。
  • 本地缓存异常
    当Android Studio缓存和已下载的SDK、AndroidX WebKit依赖版本不匹配时,会出现方法识别失效的问题,可通过清理缓存后重启项目解决。

代码修正参考

调整方法签名的可空性匹配要求,同时修正原代码中接口嵌套在类内部的语法问题:

class FileChooseClient(private val activity: ActivityChoser) : WebChromeClient() {
    override fun onShowFileChooser(
        v: WebView?,
        fpc: ValueCallback<Uri>?,
        fcp: FileChooserParams? // 修正:增加可空标记匹配父类签名
    ): Boolean {
        if (activity.uploadMessage != null) {
            activity.uploadMessage?.onReceiveValue(null)
            activity.uploadMessage = null
        }
        activity.uploadMessage = fpc
        // 修正:对可空的fcp做空判断
        val intent: Intent = fcp?.createIntent() ?: return false
        try {
            activity.startActivityForResult(intent, ActivityChoser.REQUEST_SELECT_FILE)
            (activity as Activity).overridePendingTransition(
                android.R.anim.fade_in,
                android.R.anim.fade_out
            )
        } catch (e: ActivityNotFoundException) {
            activity.uploadMessage = null
            return false
        }
        return true
    }
}

// 修正:将接口从类内部移到外部,避免语法嵌套错误
interface ActivityChoser {
    companion object {
        const val REQUEST_SELECT_FILE = 100
    }
    var uploadMessage: ValueCallback<Uri>?
    fun startActivityForResult(intent: Intent, req: Int)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 09:06:00