반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함

Udacity 강좌 - Lesson 2 실습 02

2016. 8. 15. 18:51 | Posted by 솔웅


오늘은 지난번에 분석했던 네트워크 연결 관련 소스코드를 실제로 프로젝트에 집어 넣겠습니다.


우선 https://gist.github.com/anonymous/1c04bf2423579e9d2dcd 에 있는 소스코드를 MainActivity 의 PlaceholderFragment class에 있는 onCreateView Method 에 삽입합니다.


이 때 몇가지 import 해야 하는데요. 이건 Auto Import를 활성화 해 놓으면 이클립스가 알아서 처리합니다.


Mac instructions: To enable auto-import, go to Android Studio > Preferences > Editor > Auto Import. Check all the boxes and insert all imports on paste.

Windows instructions: To enable auto-import, go to File > Settings > Editor > Auto Import > Java. Check all the boxes and insert all imports on paste.


이렇게 한 다음에 실행 하면 NetworkOnMainThreadException 이 일어납니다.

Android Device Monitor 에서 프로세스 아이디 (여기서는 7762)로 LOGCAT을 검색해 보면 위 그림과 같이 NetworkOnMainThreadException 이 일어났다는 메세지가 나오고 어느 클래스의 몇번째 줄에 있는 코드에서 예외가 발생했다는 로그들을 찾아 볼 수 있습니다.



저 로그를 보면 에러는 115번째 줄에서 난 것으로 나옵니다.


바로  urlConnection.connect(); 부분 입니다.

그 이유는 이 연결은 Main Thread 에서는 구현하면 안되는 것이기 때문입니다.

그럼 이제 이 소스코드를 올바르게 Refactoring 해야 하는데요. 일단 그 전에 프로세스와 쓰레드에 대해 간단히 공부하고 넘어가겠습니다.

메인 쓰레드에서는 대개 사용자와 상호 작용하는 UI 관련 작업들을 담당하게 됩니다.

백그라운드 쓰레드에서는 long-running work 을 주로 담당하게 됩니다.

Background Thread 를 생성하려면 AsyncTask 를 사용하면 간단하게 처리할 수 있습니다.

이 클래스의 핵심 메소드는 doInBackground() 입니다.

이 글 쓰기 전에 프로세스와 쓰레드에 대해 두어개의 글을 올렸는데 그것도 도움이 될 겁니다.

이제 네트워크 관련 소스코드들을 AsyncTask 로 옮겨 보겠습니다.

옮기는 순서는 

1. PlaceholderFragment class 를 ForecastFragment class 로 이름을 바꾼다

2. ForecastFragment 라는 새로운 자바 파일을 만들어서 이 클래스를 옮긴다.

3. FetchWeatherTask 라는 이름의 AsyncTask 클래스를 만든다.

이렇게 하면 되는데요.

이 과정은 다음 글에서 코드를 분석한 후에 실습을 이어 나가겠습니다.


반응형

Comment