Mr.Alright---Kotlin中使用VasSonic时,WebResourceResponse类型转换异常

最近项目中嵌入了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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值