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

Xamarin.Forms WebView选文件抛出ClassCastException异常求助

解决Xamarin.Forms WebView文件选择后ClassCastException异常

问题原因

你使用的mUploadCallbackAboveL是Android 5.0+的IValueCallback<Uri[]>类型,它的OnReceiveValue方法要求传入Uri数组,但你直接传入了单个Uri对象,触发类型转换异常。

修复代码

修改OnActivityResult方法,将单个Uri包装成数组传入:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
{
    if (requestCode == FILECHOOSER_RESULTCODE)
    {
        if (null == mUploadCallbackAboveL)
            return;

        Uri[] results = null;
        if (resultCode == Result.Ok && intent != null)
        {
            // 将单个Uri包装为数组
            results = new Uri[] { intent.Data };
        }

        // 传入Uri数组,取消选择时传入null
        mUploadCallbackAboveL.OnReceiveValue(results);
        mUploadCallbackAboveL = null;
    }
}

额外适配(支持多选文件)

如果你的HTML文件输入框设置了multiple属性支持多选,需要处理Intent返回的多个Uri:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
{
    if (requestCode == FILECHOOSER_RESULTCODE)
    {
        if (null == mUploadCallbackAboveL)
            return;

        Uri[] results = null;
        if (resultCode == Result.Ok && intent != null)
        {
            if (intent.ClipData != null)
            {
                // 处理多选文件
                int count = intent.ClipData.ItemCount;
                results = new Uri[count];
                for (int i = 0; i < count; i++)
                {
                    results[i] = intent.ClipData.GetItemAt(i).Uri;
                }
            }
            else
            {
                // 处理单个文件
                results = new Uri[] { intent.Data };
            }
        }

        mUploadCallbackAboveL.OnReceiveValue(results);
        mUploadCallbackAboveL = null;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:42