最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android WebView打開網頁一片空白的解決方法

 更新時間:2018年12月26日 14:24:14   作者:xxq2dream  
這篇文章主要介紹了Android WebView打開網頁一片空白的解決方法,試了很多方法,最后記錄一下,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

問題描述:

  • 網頁鏈接是Https鏈接
  • 網頁鏈接在電腦的Chrome瀏覽器中打開正常
  • 網頁鏈接在手機的Chrome瀏覽器中打開正常
  • 網頁鏈接在IOS的App上打開正常
  • 網頁鏈接在Android App中打開一片空白,沒有任何提示

 問題原因

試了很多方法,最后發(fā)現是Https的證書有問題,由于網頁鏈接是客戶提供的,不知道證書是如何生成的,導致不被Android系統(tǒng)信任

問題的發(fā)現之旅

網頁鏈接在手機和電腦都能打開,所以想著網頁鏈接本身應該沒有問題。

debug網頁加載的過程也沒有發(fā)現問題

但是后來用UC瀏覽器打開以后發(fā)現加載的過程中會彈出提示:

出錯的提示

根據彈出的提示知道很可能是證書的問題,于是重新開始debug項目中的WebView

一般我們在初始化一個 WebView 時都有幾個固定的步驟,其中最重要的一步就是設置 WebViewClient

enWebview.setWebChromeClient(new WebChromeClient());
enWebview.setWebViewClient(new WebViewClient());

如果WebView加載因為證書的問題失敗,就會回調 WebViewClient 的一個接口:

@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, SslError error) {
}

WebViewClient 默認會終止加載

public class WebViewClient {

  public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {
    //終止加載   
    handler.cancel();
  }
  ...
}

這個 handler 是一個 SslErrorHandler 接口

public class SslErrorHandler extends Handler {

  /**
   * @hide Only for use by WebViewProvider implementations.
   */
  @SystemApi
  public SslErrorHandler() {}

  /**
   * Proceed with the SSL certificate.
   */
  public void proceed() {}

  /**
   * Cancel this request and all pending requests for the WebView that had
   * the error.
   */
  public void cancel() {}
}

通過上面的注釋我們可以知道,調用 proceed 就是繼續(xù)利用當前證書加載,而 cancel 就是終止本次的所有請求。而上面 WebViewClient 顯然默認是終止所有請求了。

通過debug發(fā)現, WebViewClient 在調用了上面的 SslErrorHandlercancel 方法以后,就馬上會回調 onPageFinished 方法,不會回調 onReceivedError ,所以也就不會展示自定義的加載錯誤頁面,結果就是一片空白了。

原因找到了,那怎么解決呢?

其實答案也已經在上面給出了。我們直接覆寫 WebViewClientonReceivedSslError 方法,然后根據需要做些處理。比如彈出提示框告訴用戶當前證書有問題,是否繼續(xù)加載等。

public class MyWebViewClient {

  public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {
    //彈出提示框,讓用戶決定是否繼續(xù)加載
    //1.用戶選擇繼續(xù)加載
   // handler.proceed();
    //2.用戶取消
    //handler.cancel()
  }
  ...
}

總結

這個問題困擾了很久,剛剛開始想到可能是WebView兼容問題,因為印象里WebView有很多坑。但是同一個客戶提供的另一個Https的鏈接是正常的,而且之前沒有出現過這種情況,于是debug進去發(fā)現網頁鏈接正常傳入了就沒多想,就認為是沒問題了。還是"too young, too simple"??!

而且對 WebViewClientonReceivedSslError 也不熟悉,沒有想到這一層?,F如今基本上所有的網頁鏈接都是 Https 的了,我們以后在開發(fā)過程中還是要注意這個問題,在 onReceivedSslError 中提前做好處理。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android自定義ListView單擊事件失效的解決方法

    Android自定義ListView單擊事件失效的解決方法

    這篇文章主要為大家詳細介紹了Android自定義ListView單擊事件失效的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android自定義圓角ImageView

    Android自定義圓角ImageView

    這篇文章主要介紹了Android自定義圓角ImageView的相關資料,需要的朋友可以參考下
    2016-01-01
  • 總結Android App內存優(yōu)化之圖片優(yōu)化

    總結Android App內存優(yōu)化之圖片優(yōu)化

    網上有很多大拿分享的關于Android性能優(yōu)化的文章,主要是通過各種工具分析,使用合理的技巧優(yōu)化APP的體驗,提升APP的流暢度,但關于內存優(yōu)化的文章很少有看到。下面是我在實踐過程中使用的一些方法,很多都是不太成熟的項目,只是將其作為一種處理方式分享給大家。
    2016-08-08
  • Android之Spinner用法詳解

    Android之Spinner用法詳解

    這篇文章主要介紹了Android之Spinner用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 詳細介紹Android-Room數據庫的使用

    詳細介紹Android-Room數據庫的使用

    這篇文章主要介紹了詳細介紹Android-Room數據庫的使用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android開發(fā)筆記之:返回鍵的復寫onBackPressed()介紹

    Android開發(fā)筆記之:返回鍵的復寫onBackPressed()介紹

    本篇文章是對Android中返回鍵的復寫onBackPressed()進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Android開發(fā)之RecyclerView控件

    Android開發(fā)之RecyclerView控件

    本文給大家介紹的是Android開發(fā)中常用的RecyclerView控件的使用方法以及簡單的特性,有需要的小伙伴可以參考下
    2016-02-02
  • Android ViewPager的事件沖突的解決辦法

    Android ViewPager的事件沖突的解決辦法

    這篇文章主要介紹了Android ViewPager的事件沖突的解決辦法的相關資料,需要的朋友可以參考下
    2017-06-06
  • Flutter使用?input?chip?標簽組件示例詳解

    Flutter使用?input?chip?標簽組件示例詳解

    這篇文章主要為大家介紹了Flutter使用?input?chip?標簽組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Android利用ViewPager實現滑動廣告板實例源碼

    Android利用ViewPager實現滑動廣告板實例源碼

    利用ViewPager我們可以做很多事情,從最簡單的導航,到頁面切換菜單等等。ViewPager的功能就是可以使視圖滑動,就像Lanucher左右滑動那樣
    2013-06-06

最新評論

乌鲁木齐市| 纳雍县| 阜新市| 镇原县| 边坝县| 浪卡子县| 连江县| 通州区| 中山市| 阳泉市| 兴国县| 忻城县| 库尔勒市| 周口市| 齐河县| 永仁县| 广平县| 台前县| 灵璧县| 安达市| 静乐县| 平阳县| 洪雅县| 新宾| 浑源县| 沽源县| 南投县| 阿尔山市| 东山县| 恭城| 深泽县| 舟曲县| 乐昌市| 西昌市| 绥宁县| 东明县| 来凤县| 治县。| 密云县| 凌云县| 西乌珠穆沁旗|