Проблема Android MySQL только в Android 4.0?

Я получаю эту ошибку на устройстве и эмуляторе Ice Cream Sandwich (Android 4.0). Но приложение отлично работает на эмуляторе Android 2.3.

06-19 00:34:38.357: E/AndroidRuntime(535): FATAL EXCEPTION: main
06-19 00:34:38.357: E/AndroidRuntime(535): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kickinglettuce.rate_this/com.kickinglettuce.rate_this.Main}: java.lang.NullPointerException
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.os.Looper.loop(Looper.java:137)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.ActivityThread.main(ActivityThread.java:4424)
06-19 00:34:38.357: E/AndroidRuntime(535):  at java.lang.reflect.Method.invokeNative(Native Method)
06-19 00:34:38.357: E/AndroidRuntime(535):  at java.lang.reflect.Method.invoke(Method.java:511)
06-19 00:34:38.357: E/AndroidRuntime(535):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-19 00:34:38.357: E/AndroidRuntime(535):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-19 00:34:38.357: E/AndroidRuntime(535):  at dalvik.system.NativeStart.main(Native Method)
06-19 00:34:38.357: E/AndroidRuntime(535): Caused by: java.lang.NullPointerException
06-19 00:34:38.357: E/AndroidRuntime(535):  at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
06-19 00:34:38.357: E/AndroidRuntime(535):  at org.json.JSONTokener.nextValue(JSONTokener.java:94)
06-19 00:34:38.357: E/AndroidRuntime(535):  at org.json.JSONArray.(JSONArray.java:87)
06-19 00:34:38.357: E/AndroidRuntime(535):  at org.json.JSONArray.(JSONArray.java:103)
06-19 00:34:38.357: E/AndroidRuntime(535):  at com.kickinglettuce.rate_this.Main.onCreate(Main.java:81)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.Activity.performCreate(Activity.java:4465)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-19 00:34:38.357: E/AndroidRuntime(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-19 00:34:38.357: E/AndroidRuntime(535):  ... 11 more

Начальная активность почти идентична этой:

http://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/

Вот пустая строка в моем коде:
jArray = new JSONArray(result);


person TheLettuceMaster    schedule 19.06.2012    source источник
comment
Не видя вашего кода, его трудно отлаживать только по трассировке стека.   -  person jedwards    schedule 19.06.2012


Ответы (1)


Сегодня утром я написал сообщение в блоге на ту же тему:

Почему мое приложение аварийно завершает работу на бутерброде с мороженым?


Причина, по которой вы выполняете принудительное закрытие, заключается в том, что вы пытаетесь подключиться к сети в потоке пользовательского интерфейса. Это потенциально дорогостоящая операция, которая, скорее всего, заблокирует поток пользовательского интерфейса, что приведет к задержке. ICS и HoneyComb ввели более строгие проверки против злоупотребления потоком пользовательского интерфейса, и теперь автоматически принудительно закрывают ваше приложение, если вы пытаетесь это сделать. Вот почему ваше приложение аварийно завершает работу на Android 4.0, но не на Android 2.3. Вы должны выполнить HTTP-запрос в каком-то отдельном потоке (то есть либо в простом Thread, либо в AsyncTask).

Прочитайте мой пост в блоге, указанный выше... в нем более подробно объясняется, почему вы должны выполнять такие операции в отдельном рабочем потоке. Этот пример кода может оказаться полезным для начала работы.

person Alex Lockwood    schedule 19.06.2012
comment
Когда Android принудительно закрывает приложение, возникает исключение нулевого указателя? Это кажется не очень интуитивным. - person jedwards; 19.06.2012
comment
NullPointerException заставляет приложение принудительно закрыться, а не наоборот. - person Alex Lockwood; 19.06.2012
comment
Я понимаю, что исключение с нулевым указателем приведет к его закрытию, но вы говорите, что ICS и HoneyComb... принудительно закрывают ваше приложение. Если это правда, и если это так, почему бы им не бросить AbusingUIThreadException (или что-то еще) - почему исключение нулевого указателя, которое указывает на ошибку программирования, а не архитектурную. - person jedwards; 19.06.2012
comment
Вау, спасибо, время для этого поста было безупречным. Теперь мне просто нужно выяснить, как использовать Asyntask... - person TheLettuceMaster; 19.06.2012
comment
Кто-то еще задал очень похожий вопрос около 5 часов назад... Я не лгал, когда сказал, что этот вопрос мучает StackOverflow, ха-ха :) - person Alex Lockwood; 19.06.2012