Ошибка при выполнении Http-сообщения в сотах - PullRequest
3 голосов
/ 20 мая 2011

У меня есть два мобильных устройства Android, одно v2.3 api 9 и одно v3.1 honeycomb. Я хочу опубликовать ссылку 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");
}  
} 

Ответы [ 4 ]

11 голосов
/ 02 ноября 2011

StrictMode включен в HoneyComb, его необходимо отключить, чтобы избежать NetworkOnMainThreadException

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

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

http://developer.android.com/reference/android/os/AsyncTask.html

6 голосов
/ 04 июня 2011

Вы испытываете это из-за новой функции в Android Honeycomb. Если вы посмотрите журналы, то увидите, что вы получаете NetworkOnMainThreadException исключение

В Android Honeycomb есть новая политика приложений , которая ограничивает выполнение длительных вызовов в главном потоке .

Пожалуйста, проверьте ваш стек исключений, если вы видите следующее: StrictMode$AndroidBlockGuardPolicy.onNetwork

Мне помогло прочитать это , а затем исправить мой код, чтобы он не использовал основной поток выполнения для вызова HTTP.

5 голосов
/ 04 октября 2012

100% рабочий раствор!

Поместите следующие коды над super.onCreate в методе protected void onCreate:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

Идея от Jorgesys! Спасибо ему! Надеюсь, это решит вашу проблему ~

2 голосов
/ 04 октября 2012

У меня была такая же проблема, и она была устранена с помощью Async Task. Так что не вызывайте запрос httppost в главном потоке. Вместо этого используйте задачу Async, чтобы сделать http post . Это также дает вам более комфортное состояние.ссылка: http://www.vogella.com/articles/AndroidPerformance/article.html

...