Как стать автором
Обновить

Комментарии 21

У меня норм (55 тыс. показов с понедельника)
Это ж какой URL надо пытаться загрузить, чтобы получить IndexOutOfBoundsException в StringBuilder.append? Больше на баг стандартной библиотеки похоже…
Это похоже на кудрявые руки разработчиков Admob, документация Java явно описывает такое поведение append

append(CharSequence s, int start, int end);

Throws: IndexOutOfBoundsException - if start or end are negative, or start is greater than end or end is greater than s.length()
Да, но обратите внимание на то, что вызов идет из UriCodec.appendEncoded. Насколько я помню libcore является частью внутренних библиотек Android.
Но непосредственно-то со StringBuilder Admob не работает! Со StringBuilder работает что-то из libcore, что не выглядит как часть Admob.

Так или иначе, падает HTTP-клиент, причем на этапе парсинга URL. Вот я и спрашиваю, что же это за URL такой, что вместо стандартного URISyntaxException прилетает IndexOutOfBoundsException.

PS если бы это был С++ — было бы переполнение буфера со всеми вытекающими последствиями
>> PS если бы это был С++ — было бы переполнение буфера со всеми вытекающими последствиями
Отвечу коротко: Не всегда.
UPD:
Судя по исходному коду, такая ошибка возникает, если ссылка заканчивается неполной urlencode-последовательностью, например example.org/page?q=%3.

Так что проблема все-таки в стандартной библиотеке, поскольку согласно спецификации интерфейса, исключение должно быть выкинуто немного другое.

Другое дело, что во вспомогательных потоках, не влияющих на основную программу, надо ловить все-таки все исключения, независимо от степени их ожидаемости, тут разработчики Admob действительно прокололись.
А можно увидеть пару ссылок? Например, хотелось бы почитать как именно Admob предполагает и увидеть жалобы из США.
У меня в понедельник было одно письмо, вчера еще одно, а сегодня уже 15. Вот одно из них:

I am soooooooo incredibly frustrated!!! My problems all started on Monday.....I started getting kicked out of my game 250+ Solitaire Collection.....it was here and there I'd get kicked out. Then Tues it got worse, more frequent, but I could at tines play it for up to a half hour at a time, now its Wed and I can't even move 1 card b4 it kicks me out!!! I even uninstalled it and re-installed it, that didn't help at all. It'll kick me out either when it first loads or usually it waits fir me to pick my game....it doesn't matter which game I pick, once the cards load it kicks me out…
PLEASE HELP ME FIX THIS!!! This is the ONLY game I play EVERY SINGLE morning.

А по поводу ссылок забейте в гугл строчку «java.lang.IndexOutOfBoundsException
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:156)»
Чувствую народ побежить вставлять try-catch на все вызовы неосновных сторонних библиотек.
Разрабочики игр почти все делают… Ну по крайней мере крупные…

И еще — кроме этого, возможность включать и отключать со стороны сервера.

А то сторонние библиотеки они такие — если не падают, то могут в какой нибудь init-е блокирующем весеть долго… И не все позволяют их в отдельную нитку запихнуть… Или любят по 50 http запросов вызвать — каждый в отдельной нитке. Или резко памяти 20 мегабайт занять, хотя до этого 500кб обходились.

А вообще — это забота отдельного человека, который как раз занимается вопросом интеграции сторонних SDK в приложение.
> А вообще — это забота отдельного человека,

Вы буржуй :) Не у всех есть отдельный человек для введения int переменных, а отдельный для String. Фирмы бывают разного размера
По стеку это внутренный поток библиотеки Admob и try-catch здесь не помогут
Но ведь библиотеку сначала надо вызвать, верно?
Я так понял что код спотыкается на вызове «loadAd» (предполагаю, в стеке это предпоследняя строка), которую как раз можно заткнуть.
Нет. Это не кусок стека, это весь стек. loadAd без ошибок запускает поток, который через некоторое время крэшит
Отличная новость! Надеюсь, сгниют все приложения, авторы которых добавляют в них говно! А то куда не плюнь — везде эта гадость.
Вам не стоило писать этого в топике для разработчиков.
Почувствуйте себя непонятым :)
И искренне желаю Вам большую зарплату, чтобы вы могли покупать наши программы без гумна.
я сам вынужден писать софт, который бы не содержал оного
Вынужден?
Остаётся только порекомендовать людям сделать права Root и установить что-нибудь вроде AdAway :) И рекламы не будет, в том числе и этой проблемы.
А тем временем заканчивался 2014… 12 декабря, Android 4.2.2
Crashlytics:
java.lang.IndexOutOfBoundsException
       at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:156)
       at java.lang.StringBuilder.append(StringBuilder.java:311)
       at libcore.net.UriCodec.appendEncoded(UriCodec.java:114)
       at libcore.net.UriCodec.appendPartiallyEncoded(UriCodec.java:142)
       at java.net.URLStreamHandler.toExternalForm(URLStreamHandler.java:281)
       at java.net.URL.toURILenient(URL.java:510)
       at libcore.net.http.HttpEngine.(HttpEngine.java:195)
       at libcore.net.http.HttpURLConnectionImpl.newHttpEngine(HttpURLConnectionImpl.java:265)
       at libcore.net.http.HttpURLConnectionImpl.initHttpEngine(HttpURLConnectionImpl.java:252)
       at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
       at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
       at com.google.android.gms.internal.cy.aB()
       at com.google.android.gms.internal.ct$1.run()
       at com.google.android.gms.internal.cu$1.run()
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
       at java.lang.Thread.run(Thread.java:856)

Старые грабли?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории