프로그래밍/안드로이드

android.os.NetworkOnMainThreadException 에러

가카리 2013. 11. 19. 20:27
반응형

android.os.NetworkOnMainThreadException 에러

 

이 예외는 네트워크 작업이 UI 스레드(메인 스레드)에서 동작하기 때문에 발생하며 안드로이드 3.0 이전까지는 발생하지 않던 예외이다. 안드로이드 3.0부터는 지연이 발생할 수 있는 네트워크 작업이 UI 스레드에 영향을 주는 것을 원천적으로 막고 있다. 그래서 안드로이드 3.0 이후 버전을 사용할 경우에는 네트워크 작업을 UI 스레드가 아닌 별도의 스레드(AsyncTask )에서 처리해야 한다. 이것이 정상적인 처리 방법이며 혹여 단순한 테스트를 하는 경우나 아주 부득이한 경우에는 다음과 같은 코드를 사용해서 이러한 정책을 우회할 수 있다.


 

if(android.os.Build.VERSION.SDK_INT > 9) {

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

StrictMode.setThreadPolicy(policy);

 

SDK는 3.0이상으로 높게 잡은 후, onCreate 구문에서 post등으로 값을 전송하면 저 에러를 만날 수 있습니다.

그때는 저 코드를 넣고 해결하세요~