2012-03-08 2 views
0

ICS에서 작동하도록 허니 콤 응용 프로그램을 조정했습니다. 웹보기의 내 광고가 더 이상 표시되지 않는 것이 좋습니다. 이 섹션에 코드를 변경하지 않았습니다. ICS 호환 코드는 ICS 장치가 아닌 HoneyComb 장치에 광고를 표시합니다. 무엇이 다르며 어떻게 처리합니까?HoneyComb Webview에 표시되는 광고 (ICS가 아닌 웹보기)

는 여기에 내가 ICS 장치에서 수신 로그를하지만,하지 벌집 이하 :

ICS를 WebView의 구현은 개정 된
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와 ICS의 웹보기의 행동에 문제가있는 너무 많은 .

두 가지 문제가있는 것 같습니다.

먼저 HTML 이스케이프에서 특별한 의미를 갖는 "%"를 전달할 수없는 것처럼 쿼리를 인코딩하려고합니다. 그것은 strIpAddress 매개 변수에서 발생하는 것 같습니다. 이 같은 코드를 사용할 수 있습니다

String encodedIPAddress = URLEncoder.encode(strIpAddressValue); 

나는 다음 및 String.format하거나 문자열 +를 사용하여 최종 URL 문자열로 모두 함께 사람들을 넣어, 각 매개 변수 값을 인코딩합니다. 이렇게하면 향후 유사한 문제를 피할 수 있습니다.

두 번째로 Android는 UI 스레드에서 WebView를 호출하지 않는다고 불평하고 있습니다. 내가 방법을 포장 것입니다 당신과 같이 runInUiThread에서 호출되는 (난 당신이()는 showAd 전화하는거야 있으리라 믿고있어) : 내 경우에는

activity.runOnUiThread(new Runnable() { 
    public void run() { 
     webView.showAd(); 
    } 
}); 
0

를, 내가 Activity.runOnUiThread 내부 선 (다음했다 Runnable를 실행 가능한).

webView.setWebChromeClient(WebChromeClient webChromeClient); 

진도 계가 보였다.

내가 그 선에서 주석

는 응용 프로그램이

당신이 언급 한 오류를 보여주는 중단했다.