2011-12-06 40 views
0

在我的班級之一,我叫WebView.postUrl()如何調試與設備相關的WebView和/或WebViewClient異常?

getWebView().postUrl(url, EncodingUtils.getBytes(postData, "BASE64")); 

其中上LG擎天柱小號完美的作品,但用於在HTC的Nexus One某種原因不能正常工作。

通過「作品」我的意思是目標網站的響應與預期結果的postUrl()查詢,其特徵是始終:

  1. 產生 WebViewClient.onPageStarted()電話,隨後
  2. WebView.loadUrl(),隨後由WebViewClient.onPageFinished()

在罪魁禍首的Nexus

  • 其中一個,但是,只有第一個WebViewClient.onPageStarted()呼叫生成,從來沒有任何其他呼叫。

    顯然,WebView和/或WebViewClient在不同設備上的行爲不同,因爲兩個設備都運行完全相同的應用程序代碼

    (抑或是真實的反應有所不同,以不同的設備,它使用完全相同的WiFi網關的網站?)

    這兩種設備上運行完全相同的應用程序代碼,但Android的版本略有不同:LG的運行2.3.3,N1運行2.2.1。

    任何想法或提示如何處理這個棘手問題的調試?

    例如,是否有任何掛鉤可以放置在某處以追蹤封面下的真實情況?

  • 回答

    2

    覆蓋WebViewClient的onReceivedSslError和onReceivedError。我猜這是2.2版不信任某些CA的問題,或者是導致SSL證書中的通配符域出現問題的錯誤 - 這兩個特定錯誤都會在onReceivedSslError中被捕獲。

    如果這些方法中的任何一個被調用,頁面可能無法完成加載。

    如果沒有任何錯誤,您的服務器可能會做一些不同的事情,因爲設備的用戶代理 - 您可能必須手動設置。

    +0

    這是一個令人難以置信的幫助和急需的小費。我會執行並報告。 +1在此期間。 – an00b

    +0

    好的,我回來了初始結果:我實現了'onReceivedError'和'onReceivedSslError',以便他們只記錄LogCat上的內容,並且......沒有任何錯誤!我對沒有任何'onReceivedSslError'並不感到驚訝,因爲它只是一個簡單的查詢(不一定是通過SSL),但事實上根本沒有收到的錯誤表明你的第二個猜測(服務器的用戶代理依賴行爲)可能是罪魁禍首。很快就會進行試驗。 – an00b

    +0

    更新2:我通過在NA上僞造UA來進行快速實驗,與LG完全相同(使用'WebSettings.setUserAgentString'):(奇數)行爲保持不變!也就是說,網站對'postUrl()'沒有響應。我開始懷疑我自己的代碼中存在一個錯誤......(並不奇怪,但是當我的代碼在N1以外的所有手機上表現良好時,我怎麼能找到它?) – an00b