SlideShare a Scribd company logo
Android Network
제작자 : 쿠디(cooddy)
제작자 블로그
Tistory Blog : http://cooddy.tistory.com/
네트워킹 상태 조회
• ConnectivityManager Class
• 정의 : 안드로이드에서 네트워크의 형재 상태에 대한 정보를 반환하는 객체
• 기능
• 네트워크 연결 상태를 감시
• 만약 네트워크 연결 상태가 변경되면 다른 애플리케이션에 방송
• 또 하나의 네트워크 연결이 끊기면 다른 네트워크로 연결을 시도
• getNetworkInfo() Func
• 정의 : 현재 어떤 네트워크가 사용가능한지를 파악
• getNetworkInfo() 메소드를 호출할 때는 정보를 얻고 싶은 네트워크를 지정해야 함
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info1 = manager.getNetWorkInfo(ConnectivityManager.TYPE_WIFI);
String status = “” + info1.isAvailable() + info1.isConnected();
display.setText(status);
네트워크 지정 상수(getNetworkInfo(parameter))
• 네트워크 종류
• TYPE_MOBILE : default 모바일 네트워크
• TYPE_MOBILE_DUN : DUN방식의 모바일 네트워크
• TYPE_MOBILE_HIPRI : High Priority 모바일 네트워크
• TYPE_MOBILE_MMS : MMS 방식 모바일 네트워크
• TYPE_MOBILE_SUPL : SUPL 방식 모바일 네트워크
• TYPE_WIFI : default WIFI 네트워크
• TYPE_WIMAX : default WIMAX 네트워크
• TYPE_BLUETOOTH : 블루투스 네트워크
네트워크 상태 반환 함수(getNetworkInfo 객체)
• 네트워크 상태 반환 함수
• DetailedState getDetailedState() : 네트워크의 상세한 상태를 보고
• String getExtraInfo() : 부가적인 정보를 보고
• String getTypeName() : “WIFI”나 “MOBILE”과 같은 문자열 이름을 반환
• Boolean isAvailable() : 네트워크가 사용 가능한지를 보고
• Boolean isConnected() : 네트워크가 연결되어 있는지를 보고
• Boolean isConnectedConnecting() : 네트워크가 연결되어 있는지 또는 연결 중인지를 보고
• Boolean isRoaming() : 현재 로밍 상태인지를 보고
• String toString() : 네트워크의 전체 상태를 문자열로 보고
코드 소스로 보기
• [CODE]
웹(Web)에서 파일 다운로드
• HttpURLConnection(java.net Package)
• http 프로토콜을 이용하여서 네트워크에서 파일 또는 웹페이지를 읽을 때 사용하는 기본 클래스
• 웹 서버로 부터 파일을 읽을 시 주의점
• 메인 스레드에서 직접 파일을 다운로드하면 예외(Exception)이 발생
• “NetworkOnMainThreadException”이 발생
• StrictMode : 네트워크에서 다운로드하는 것과 같은 시간이 많이 걸리는 작업은 메인 스레드에서 하면 안된다는 의미
•  별도의 스레드를 생성하고 여기에서 파일을 다운로드 해야 함
• AsyncTask 객체
• 새로운 스레드를 생성하는 방법 중의 하나
• 객체로부터 상속하는 AsyncTask는 사용하고자 하는 type을 지정해주어야 함
• Params : background 작업 시 필요한 data의 type 지정
• Progress : background 작업 중 진행상화을 표현하는데 사용되는 data를 위한 type 지정
• Result : background 작업 완료 후 리턴 할 data의 type 지정
AsyncTask 객체
• Ex] private class ‘지정 객체명’ extends AsyncTask<Params, Progress, Result>{…….}
AsyncTask:execute(parameter)
리턴 AsyncTask:doInBackground(parameter)
AsyncTask:publishProgress(parameter)
AsyncTask:onProgressUpdate(parameter)
AsyncTask:onPostExecute(parameter)
AsyncTask 객체 callback 함수
• Callback 함수들은 상황에 맞게 Overriding 해야 함
• protected void onPreExecute() : Background 작업이 시작되지마자 실행될 코드를 구현
• protected abstract Result doInBackground(Params… params) : Background에서 수행할 작업을 구현
• execute() 함수에 입력된 인자들을 전달 받음
• void onProgressUpdate(Progress… values) : publishProgress(…) 메소드 호출의 callback으로 background 작업 진행
상황을 update하도록 구현
• void onPostExecute(Result result) : doInBackground(…)가 리턴하는 값을 바탕으로 작업 결과를 표현하도록 구현
• void onCancelled() : AsyncTask:cancel(Boolean)메소드를 사용해 AsyncTask인스턴스의 background 작업을 정지 또는
실행금지 시켰을 때 실행되는 콜백
AsyncTask Cycle
웹(Web)에서 파일 다운로드
• [CODE]
웹(Web)에서 파일 다운로드
• [CODE]
XML 처리
• 안드로이드에서 XML 처리가 필요한 경우가 바로 서버에서 제공하는 데이터를 읽어 와서 스마트
폰의 화면에 표시하는 경우
• XML은 워낙 많이 사용되므로 이것을 전문적으로 처리해주는 파서(parser)들이 존재
• Parser들 : DOM, SAX, PullParser등
파서 특징
DOM
(Document Object Model)
엘리먼트들을 한 번에 트리 구조로 파싱하여 메모리에 저장
언제든지 원하는 엘리먼트에 대한 정보를 얻을 수 있음
메모리는 많이 차지하는 단점
SAX
(Simple API for XML)
라인 단위로 파싱하기 때문에 메모리의 소모가 적음
하지만 지나쳐간 엘리먼트들의 정보를 얻고 싶으면 다시 파싱해야 함
PullParser SAX와 유사하지만 원하는 부분까지만 파싱이 가능
XML DOM 기초
• DOM은 W3C의 표준으로 XML 문서에 접근하고 처리하는 표준적인 방법을 정의
• DOM은 XML 문서를 트리 구조로 표현
• DOM은 문서 엘리먼트의 객체(Object), 특징(Property), 메소드(interface)를 정의
• DOM은 XML 엘리먼트를 구하고 변경하고 추가, 삭제하는 방법의 표준
• DOM에서 XML 문서의 모든 것은 노드(node)라고 불림
• 전체 문서는 도큐먼트 노드(Document node)라고 부름
• 모든 XML 엘리먼트는 엘리먼트 노드(element node)
• XML 엘리먼트 안의 텍스트는 텍스트 노드(text node)
• 모든 어트리뷰트(attribute)는 어트리뷰트 노드(attribute node)
XML DOM 예
• <?xml version=“1.0” encoding=“ISO-8891-1”?>
<restaurant>
<food category=“Korean Food”>
<title lang=“kor”>Fantasy of Kimchi</title>
<chef>cooddy</chef>
<year>2016</year>
<price>15,000</price>
</food>
<food category=“English Food”>
<title lang=“en”>Fish & chips</title>
<chef>Sammy</chef>
<year>2014</year>
<price>20,000</price>
</food>
</restaurant>
루트 노드
엘리멘트 노드
텍스트 노드
DOM XML 파서(Parser) 생성
• javax.xml.parsers.DocumentBuilderFactory 객체를 이용하면 자바 DOM xml 파서 생성 가능
• parse()함수 : parse()함수 호출시 XML문서가 DOM 트리 구조로 변환
• DocumentBuilder 객체 : DOM 파서(Parser)
DocumentBuilder builder = null;
try
{
Document document = builder.parse(new FileInputStream(“data//text.xml”));
}
catch(SAXException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}

More Related Content

What's hot

[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
NAVER D2
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
Yeon Soo Kim
 
RequireJS를 이용한 모듈관리.
RequireJS를 이용한 모듈관리.RequireJS를 이용한 모듈관리.
RequireJS를 이용한 모듈관리.
Hyung Eun Jin
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
JU Chae
 
Openstack Swift overview
Openstack Swift overviewOpenstack Swift overview
Openstack Swift overview어형 이
 
04 자바 네트워크
04 자바 네트워크04 자바 네트워크
04 자바 네트워크arahansa yong
 
02 realm 모델 &amp; 관계
02   realm 모델 &amp; 관계02   realm 모델 &amp; 관계
02 realm 모델 &amp; 관계
Lee-Jong-Chan
 
Hadoop io part2
Hadoop io part2Hadoop io part2
Hadoop io part2
Choonghyun Yang
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
DK Lee
 
2. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-1
2. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-12. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-1
2. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-1
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
라한사 아
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
HyeonSeok Choi
 
게이트단의 보안
게이트단의 보안게이트단의 보안
게이트단의 보안
Choonghyun Yang
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
NAVER D2
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
Choonghyun Yang
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
Leonardo YongUk Kim
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
병준 김
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
Minchul Jung
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
Myungjin Lee
 

What's hot (20)

[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
 
RequireJS를 이용한 모듈관리.
RequireJS를 이용한 모듈관리.RequireJS를 이용한 모듈관리.
RequireJS를 이용한 모듈관리.
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
 
Openstack Swift overview
Openstack Swift overviewOpenstack Swift overview
Openstack Swift overview
 
04 자바 네트워크
04 자바 네트워크04 자바 네트워크
04 자바 네트워크
 
02 realm 모델 &amp; 관계
02   realm 모델 &amp; 관계02   realm 모델 &amp; 관계
02 realm 모델 &amp; 관계
 
Hadoop io part2
Hadoop io part2Hadoop io part2
Hadoop io part2
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
2. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-1
2. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-12. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-1
2. 엔티티 매핑(entity mapping) 2 3 롬복(lombok)소개-1
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
게이트단의 보안
게이트단의 보안게이트단의 보안
게이트단의 보안
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
Java nio
Java nioJava nio
Java nio
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
 

Similar to Android Network

[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
Taekyu Lim
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
Seokju Hong
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템
박 민규
 
AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3
Keeyong Han
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
Kyunghun Jeon
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)
DEVELOPER.NET
 
Portfolio
PortfolioPortfolio
Portfolio
ByungHak Jang
 
Proxy pattern
Proxy patternProxy pattern
Proxy pattern
scor7910
 
Spark sql
Spark sqlSpark sql
Spark sql
동현 강
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
ssuser0c2478
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
Yong Joon Moon
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
YoungSu Son
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
KangSeok(Thomas) Lee
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
Inho Kwon
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
lactrious
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
SeungHyun Lee
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How ToJi-Woong Choi
 

Similar to Android Network (20)

[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템
 
AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)
 
Html5
Html5 Html5
Html5
 
Portfolio
PortfolioPortfolio
Portfolio
 
Proxy pattern
Proxy patternProxy pattern
Proxy pattern
 
Spark sql
Spark sqlSpark sql
Spark sql
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
 

Android Network

  • 1. Android Network 제작자 : 쿠디(cooddy) 제작자 블로그 Tistory Blog : http://cooddy.tistory.com/
  • 2. 네트워킹 상태 조회 • ConnectivityManager Class • 정의 : 안드로이드에서 네트워크의 형재 상태에 대한 정보를 반환하는 객체 • 기능 • 네트워크 연결 상태를 감시 • 만약 네트워크 연결 상태가 변경되면 다른 애플리케이션에 방송 • 또 하나의 네트워크 연결이 끊기면 다른 네트워크로 연결을 시도 • getNetworkInfo() Func • 정의 : 현재 어떤 네트워크가 사용가능한지를 파악 • getNetworkInfo() 메소드를 호출할 때는 정보를 얻고 싶은 네트워크를 지정해야 함 ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info1 = manager.getNetWorkInfo(ConnectivityManager.TYPE_WIFI); String status = “” + info1.isAvailable() + info1.isConnected(); display.setText(status);
  • 3. 네트워크 지정 상수(getNetworkInfo(parameter)) • 네트워크 종류 • TYPE_MOBILE : default 모바일 네트워크 • TYPE_MOBILE_DUN : DUN방식의 모바일 네트워크 • TYPE_MOBILE_HIPRI : High Priority 모바일 네트워크 • TYPE_MOBILE_MMS : MMS 방식 모바일 네트워크 • TYPE_MOBILE_SUPL : SUPL 방식 모바일 네트워크 • TYPE_WIFI : default WIFI 네트워크 • TYPE_WIMAX : default WIMAX 네트워크 • TYPE_BLUETOOTH : 블루투스 네트워크
  • 4. 네트워크 상태 반환 함수(getNetworkInfo 객체) • 네트워크 상태 반환 함수 • DetailedState getDetailedState() : 네트워크의 상세한 상태를 보고 • String getExtraInfo() : 부가적인 정보를 보고 • String getTypeName() : “WIFI”나 “MOBILE”과 같은 문자열 이름을 반환 • Boolean isAvailable() : 네트워크가 사용 가능한지를 보고 • Boolean isConnected() : 네트워크가 연결되어 있는지를 보고 • Boolean isConnectedConnecting() : 네트워크가 연결되어 있는지 또는 연결 중인지를 보고 • Boolean isRoaming() : 현재 로밍 상태인지를 보고 • String toString() : 네트워크의 전체 상태를 문자열로 보고
  • 6. 웹(Web)에서 파일 다운로드 • HttpURLConnection(java.net Package) • http 프로토콜을 이용하여서 네트워크에서 파일 또는 웹페이지를 읽을 때 사용하는 기본 클래스 • 웹 서버로 부터 파일을 읽을 시 주의점 • 메인 스레드에서 직접 파일을 다운로드하면 예외(Exception)이 발생 • “NetworkOnMainThreadException”이 발생 • StrictMode : 네트워크에서 다운로드하는 것과 같은 시간이 많이 걸리는 작업은 메인 스레드에서 하면 안된다는 의미 •  별도의 스레드를 생성하고 여기에서 파일을 다운로드 해야 함 • AsyncTask 객체 • 새로운 스레드를 생성하는 방법 중의 하나 • 객체로부터 상속하는 AsyncTask는 사용하고자 하는 type을 지정해주어야 함 • Params : background 작업 시 필요한 data의 type 지정 • Progress : background 작업 중 진행상화을 표현하는데 사용되는 data를 위한 type 지정 • Result : background 작업 완료 후 리턴 할 data의 type 지정
  • 7. AsyncTask 객체 • Ex] private class ‘지정 객체명’ extends AsyncTask<Params, Progress, Result>{…….} AsyncTask:execute(parameter) 리턴 AsyncTask:doInBackground(parameter) AsyncTask:publishProgress(parameter) AsyncTask:onProgressUpdate(parameter) AsyncTask:onPostExecute(parameter)
  • 8. AsyncTask 객체 callback 함수 • Callback 함수들은 상황에 맞게 Overriding 해야 함 • protected void onPreExecute() : Background 작업이 시작되지마자 실행될 코드를 구현 • protected abstract Result doInBackground(Params… params) : Background에서 수행할 작업을 구현 • execute() 함수에 입력된 인자들을 전달 받음 • void onProgressUpdate(Progress… values) : publishProgress(…) 메소드 호출의 callback으로 background 작업 진행 상황을 update하도록 구현 • void onPostExecute(Result result) : doInBackground(…)가 리턴하는 값을 바탕으로 작업 결과를 표현하도록 구현 • void onCancelled() : AsyncTask:cancel(Boolean)메소드를 사용해 AsyncTask인스턴스의 background 작업을 정지 또는 실행금지 시켰을 때 실행되는 콜백
  • 12. XML 처리 • 안드로이드에서 XML 처리가 필요한 경우가 바로 서버에서 제공하는 데이터를 읽어 와서 스마트 폰의 화면에 표시하는 경우 • XML은 워낙 많이 사용되므로 이것을 전문적으로 처리해주는 파서(parser)들이 존재 • Parser들 : DOM, SAX, PullParser등 파서 특징 DOM (Document Object Model) 엘리먼트들을 한 번에 트리 구조로 파싱하여 메모리에 저장 언제든지 원하는 엘리먼트에 대한 정보를 얻을 수 있음 메모리는 많이 차지하는 단점 SAX (Simple API for XML) 라인 단위로 파싱하기 때문에 메모리의 소모가 적음 하지만 지나쳐간 엘리먼트들의 정보를 얻고 싶으면 다시 파싱해야 함 PullParser SAX와 유사하지만 원하는 부분까지만 파싱이 가능
  • 13. XML DOM 기초 • DOM은 W3C의 표준으로 XML 문서에 접근하고 처리하는 표준적인 방법을 정의 • DOM은 XML 문서를 트리 구조로 표현 • DOM은 문서 엘리먼트의 객체(Object), 특징(Property), 메소드(interface)를 정의 • DOM은 XML 엘리먼트를 구하고 변경하고 추가, 삭제하는 방법의 표준 • DOM에서 XML 문서의 모든 것은 노드(node)라고 불림 • 전체 문서는 도큐먼트 노드(Document node)라고 부름 • 모든 XML 엘리먼트는 엘리먼트 노드(element node) • XML 엘리먼트 안의 텍스트는 텍스트 노드(text node) • 모든 어트리뷰트(attribute)는 어트리뷰트 노드(attribute node)
  • 14. XML DOM 예 • <?xml version=“1.0” encoding=“ISO-8891-1”?> <restaurant> <food category=“Korean Food”> <title lang=“kor”>Fantasy of Kimchi</title> <chef>cooddy</chef> <year>2016</year> <price>15,000</price> </food> <food category=“English Food”> <title lang=“en”>Fish & chips</title> <chef>Sammy</chef> <year>2014</year> <price>20,000</price> </food> </restaurant> 루트 노드 엘리멘트 노드 텍스트 노드
  • 15. DOM XML 파서(Parser) 생성 • javax.xml.parsers.DocumentBuilderFactory 객체를 이용하면 자바 DOM xml 파서 생성 가능 • parse()함수 : parse()함수 호출시 XML문서가 DOM 트리 구조로 변환 • DocumentBuilder 객체 : DOM 파서(Parser) DocumentBuilder builder = null; try { Document document = builder.parse(new FileInputStream(“data//text.xml”)); } catch(SAXException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); }