Объявления, показываемые на веб-сайте HoneyComb, но не на веб-сайте ICS - PullRequest
0 голосов
/ 08 марта 2012

Я настроил свое сотовое приложение для работы на ICS.Все хорошо, КРОМЕ моей рекламы в веб-просмотре больше не показывается.Я не сделал никаких изменений кода в этом разделе.Код, совместимый с ICS, показывает рекламу на устройстве HoneyComb, но не на устройстве ICS.Чем отличается и как мне обращаться?

Вот журналы, которые я получаю на устройстве ICS, но не HoneyComb или ниже:

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

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

Реализация ICS WebView была обновлена, поэтому у многих из нас возникают проблемы с поведением pre-ICS и ICS WebView.

Похоже, у вас есть две проблемы.

Во-первых, выхотите закодировать ваш запрос, так как похоже, что вы не можете передать тот «%», который имеет особое значение в экранировании HTML.Похоже, это происходит в параметре strIpAddress.Вы можете использовать код, подобный следующему:

String encodedIPAddress = URLEncoder.encode(strIpAddressValue);

Я бы закодировал каждое значение параметра, а затем поместил бы все это вместе в окончательную строку URL-адреса, используя String.format или просто String +.Таким образом, вы избежите любых подобных проблем в будущем.

Во-вторых, Android жалуется, что вы не вызываете WebView из потока пользовательского интерфейса.Я бы обернул метод (я предполагаю, что вы называете его showAd ()), который вы вызываете в runInUiThread, примерно так:

activity.runOnUiThread(new Runnable() {
   public void run() {
      webView.showAd();
   }
});
0 голосов
/ 28 августа 2012

в моем случае, у меня была следующая строка внутри Activity.runOnUiThread (Runnable runnable).

webView.setWebChromeClient(WebChromeClient webChromeClient);

который показал индикатор прогресса.

Когда я закомментировал эту строку, приложение перестало показывать

ошибка, которую вы упомянули.

...