2012-03-08 64 views
0

我调整了我的Honeycomb应用程序以在ICS上工作。除了webview中的广告不再显示之外,所有这一切都很好。我没有对此部分进行任何代码更改。 ICS兼容代码在HoneyComb设备上显示广告,但不在ICS设备上显示。什么是不同的,我如何处理?显示在HoneyComb Webview上但不是ICS Webview的广告

这里是我收到ICS设备上的日志,而不是蜂窝或更低:

03-08 14:50:42.485: W/webview(24262): java.lang.Throwable: Warning: A WebView method was called on thread 'Thread-617'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads. 
03-08 14:50:42.485: W/webview(24262): at android.webkit.WebView.checkThread(WebView.java:9468) 
03-08 14:50:42.485: W/webview(24262): at android.webkit.WebView.getSettings(WebView.java:4143) 
03-08 14:50:42.485: W/webview(24262): at com.accuweather.android.tablet.ads.AdView$2.run(AdView.java:160) 
03-08 14:50:42.495: W/System.err(24262): java.io.IOException: java.net.URISyntaxException: Invalid % sequence: %wl in query at index 138: http://www.accuweather.com/adrequest/adrequest.asmx/getAdCode?strAppID=lenovo&strPartnerCode=lenovo&strIpAddress=fe80::42fc:89ff:fe93:9fcb%wlan0&strUserAgent=Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0.3%3B+en-us%3B+Xoom+Build%2FIML77%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Safari%2F534.30&strCurrentZipCode=cityId=335315&strWeatherIcon=12&strUUID=99000052310400 
03-08 14:50:42.495: W/System.err(24262): at libcore.net.http.HttpEngine.<init>(HttpEngine.java:194) 
03-08 14:50:42.495: W/System.err(24262): at libcore.net.http.HttpURLConnectionImpl.newHttpEngine(HttpURLConnectionImpl.java:256) 
03-08 14:50:42.495: W/System.err(24262): at libcore.net.http.HttpURLConnectionImpl.initHttpEngine(HttpURLConnectionImpl.java:243) 
03-08 14:50:42.495: W/System.err(24262): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:78) 
03-08 14:50:42.495: W/System.err(24262): at com.accuweather.android.tablet.ads.AdView$AdRequest.getInputStreamFromURL(AdView.java:345) 
03-08 14:50:42.495: W/System.err(24262): at com.accuweather.android.tablet.ads.AdView$AdRequest.makeRequest(AdView.java:293) 
03-08 14:50:42.495: W/System.err(24262): at com.accuweather.android.tablet.ads.AdView$2.run(AdView.java:159) 
03-08 14:50:42.495: W/System.err(24262): Caused by: java.net.URISyntaxException: Invalid % sequence: %wl in query at index 138: http://www.accuweather.com/adrequest/adrequest.asmx/getAdCode?strAppID=lenovo&strPartnerCode=lenovo&strIpAddress=fe80::42fc:89ff:fe93:9fcb%wlan0&strUserAgent=Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0.3%3B+en-us%3B+Xoom+Build%2FIML77%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Safari%2F534.30&strCurrentZipCode=cityId=335315&strWeatherIcon=12&strUUID=99000052310400 
03-08 14:50:42.495: W/System.err(24262): at libcore.net.UriCodec.validate(UriCodec.java:58) 
03-08 14:50:42.495: W/System.err(24262): at java.net.URI.parseURI(URI.java:406) 
03-08 14:50:42.495: W/System.err(24262): at java.net.URI.<init>(URI.java:204) 
03-08 14:50:42.495: W/System.err(24262): at java.net.URL.toURILenient(URL.java:510) 
03-08 14:50:42.495: W/System.err(24262): at libcore.net.http.HttpEngine.<init>(HttpEngine.java:192) 
03-08 14:50:42.495: W/System.err(24262): ... 6 more 

回答

3

的ICS的WebView实现了改组,所以我们很多人有与前ICS和ICS的WebView行为问题。

看起来你有两个问题。

首先,您要对查询进行编码,因为看起来您无法传递在HTML转义中具有特殊含义的“%”。它看起来像是在strIpAddress参数中发生的。您可以使用这样的代码:

String encodedIPAddress = URLEncoder.encode(strIpAddressValue); 

我将编码每个参数的值,然后把这些一起到使用的String.format或只是字符串+您的最终URL字符串。这样你就可以避免将来出现类似的问题。

其次,Android抱怨你没有从UI线程调用WebView。我想包的方法(我假设你叫它showAd()),您呼叫的runInUiThread像这样:

activity.runOnUiThread(new Runnable() { 
    public void run() { 
     webView.showAd(); 
    } 
}); 
0
在我的情况

,我曾跟随内Activity.runOnUiThread线(Runnable接口可运行)。

webView.setWebChromeClient(WebChromeClient webChromeClient); 

显示进度计。

当我注释掉该行,该应用程序停止显示

你提到的错误。