У меня есть два мобильных устройства Android: один v2.3 api 9 и один сотовый ящик v3.1. Я хочу опубликовать ссылку http api для sms-кода. Похоже, что я получил ошибку в сотах, а другой мобильный работает отлично, это код
public void sendSMS(String phone_num, int password) { try { HttpClient hc = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.google.com/"); hc.execute(post); // I got an error here } catch(IOException e) { Log.e("error", "error"); } }
StrictMode включен в HoneyComb, вы должны отключить его, чтобы избежать NetworkOnMainThreadException
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);
http://developer.android.com/reference/android/os/AsyncTask.html
Вы испытываете это из-за новой функции в Android Honeycomb. Если вы просмотрите свои журналы, вы увидите, что вы получаете исключение NetworkOnMainThreadException
В Android Honeycomb существует новая политика приложений, которая ограничивает выполнение длительных вызовов основного потока .
Проверьте свой стек исключений, если увидите следующее: StrictMode$AndroidBlockGuardPolicy.onNetwork
Что мне помогло – это прочитать это, а затем исправить мой код, чтобы не использовать основной поток выполнения для HTTP-вызова.
100% рабочее решение!
Поместите следующие коды выше вашего super.onCreate
под protected void onCreate
:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);
Идея от Йоргиса! Спасибо ему! Надеюсь, он решает вашу проблему ~
У меня была такая же проблема и была очищена с помощью Async Task.So не вызывайте запрос httppost в основном потоке. Вместо этого используйте задачу Async, чтобы выполнить http post . Также вам будет удобнее. Link: http://www.vogella.com/articles/AndroidPerformance /article.html