Mr.Smile填坑记——Kotlin中使用VasSonic时,WebResourceResponse类型转换异常
来源:互联网 发布:如何做好淘宝详情页 编辑:程序博客网 时间:2024/06/05 15:15
最近项目中嵌入了H5,但是启动速度很慢,于是上全球最大的同性交流平台搜索了一下,找到了VasSonic,专注于首屏加速,由于官方demo是Java的,所以开始最开始用Java实验,没有问题,但是移入项目后,发现报错了,What the fuck??? err kotlin.TypeCastException: null cannot be cast to non-null type android.webkit.WebResourceResponse 什么鬼明明Java没有问题,kotlin也是自动转换的,怎么就类型转换异常了呢?先看一下Java代码 webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (sonicSession != null) { sonicSession.getSessionClient().pageFinish(url); } } @TargetApi(21) @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { return shouldInterceptRequest(view, request.getUrl().toString()); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { return sonicSession != null ? (WebResourceResponse) sonicSession.getSessionClient().requestResource(url) : null; } });再看一下Kotlin代码 webView.webViewClient = object : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { super.onPageFinished(view, url) if (sonicSession != null) { sonicSession!!.sessionClient.pageFinish(url) } } @TargetApi(21) override fun shouldInterceptRequest(view: WebView, request: WebResourceRequest): WebResourceResponse? { return shouldInterceptRequest(view, request.url.toString()) } override fun shouldInterceptRequest(view: WebView, url: String): WebResourceResponse? { return if (sonicSession != null) sonicSession.getSessionClient().requestResource(url) as WebResourceResponse else null } }看代码没有任何问题啊,为什么呢?断点调试发现,VasSonic对子资源(也就是网页中包含的其他链接)sonicSession.getSessionClient().requestResource(url)都返回null,在Java中(WebResourceResponse)null只会提示没必要强转,然而在kotlin中null as WebResourceResponse会提示肯定不会强转成功,当然类型转换异常了至于为什么kotlin中无法强转,不是太清楚,还望大神指点一二废话不多说了,解决代码在此 if (sonicSession != null) { val requestResponse = sonicSessionClient?.requestResource(url) if (requestResponse is WebResourceResponse) { return requestResponse } } return null
以上代码替换三元运算那句
阅读全文
0 0
- Mr.Smile填坑记——Kotlin中使用VasSonic时,WebResourceResponse类型转换异常
- Mr.Smile填坑记——BaseRecyclerViewAdapterHelper使用时条目复用问题(各种状态混乱)
- Mr.Smile填坑记——ButterKnife8.4.0的依赖
- Mr.Smile填坑记——startActivityForResult收不到回调
- Mr.Smile填坑记——POST请求Json打印不出来
- Mr.Smile填坑记——POST上传文件(图片、视频等)
- Mr.Smile填坑记——Unity 3D直接将游戏运行到安卓手机上
- Mr.Smile填坑记——debug、release包MD5签名的获取方式
- Mr.Smile填坑记——微博、微信debug、release版本切换不能分享
- Mr.Smile填坑记——点击分享出去的网页,无法跳转自己的app
- Mr.Smile填坑记——Android Studio运行Java代码,Run控制台中文乱码
- Mr.Smile填坑记——ndk制作so库,ndk-build不是内部或外部命令。。。的错误
- Mr.Smile填坑记——打release包报错Error:Execution failed for task ´:app:lintVitalRelease´.
- Mr.Smile填坑记——AndroidStudio3.0 Canary 8注解报错Annotation processors must be explicitly declared now.
- Mr.Smile填坑记——新浪微博分享出去回到app弹出两个相同的应用让选择
- 使用ActionBar缺少主题时jar包中抛类型转换异常
- Kotlin-类型检查和转换
- 为什么 Kotlin 调用 java 时可以使用 Lambda? —— SAM 转换机制的介绍
- Codeforces876A-Trip For Meal
- Java数据库之防SQL注入和自定义线程池
- cocos2dx3.0进度条的简析
- html5 canvas在图片上画超链接
- 人际关系
- Mr.Smile填坑记——Kotlin中使用VasSonic时,WebResourceResponse类型转换异常
- 4.1.7ReentrantLock实现生产者消费者模式(1对1)
- 设计模式的原则
- 理解 Python 中的 *args 和 **kwargs
- hive2.1.1 部署安装
- UICollectionView的简单使用
- HTML5 使用video标签实现选择摄像头功能
- Linux 中进程的定义以及查看
- Oracle索引(Index)创建使用