Android Honeycomb: NetworkOnMainThreadException даже при использовании AsyncTask и без строгого режима?
Я сталкиваюсь с NetworkOnMainThreadException с моим приложением Android 3.0. В поисках решения я нашел это, но если я правильно понял, по умолчанию будет выбран строгий режим.
Кроме того, весь мой доступ к сети находится в AsyncTask
так что я не вижу смысла в этом исключении в любом случае.
Итак, я совершенно отчаялся, что я должен сделать, чтобы предотвратить это...
С уважением, медуза
Редактировать:
Эта запись в блоге говорит, что AsyncTask должно быть достаточно, но, по крайней мере, проясняет точку StrictMode.
Решение:
Я выключил StrictMode (возможно, лучше сохранить некоторые настройки, но меня это не беспокоило...):
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
После этого я наткнулся на "java.lang.RuntimeException: этот поток запрещает HTTP-запросы", но нашел решение для этого здесь. Я немного смущен, хотя, как AndroidHttpClient
работал нормально, когда я использовал его в моем приложении Android 2.0+...
Решение, часть2
As it turned out, using AsyncTask was a nice idea but pretty useless if done wrong... So there was nothing wrong with the strict mode's reaction. Should have listened, er?;)
Still good to know it's activated on Honeycomb by default.
2 ответа
StrictMode включен по умолчанию в Honeycomb.
Смотрите, скажем, ссылку конкретно penaltyDeathOnNetwork()
, Я столкнулся с подобной проблемой.
В Android включен Honeycomb StrictMode, отключите его, добавив код в функцию onCreate()...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}