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
相关产品推荐
相关产品推荐

