<kor>
모바일 안드로이드에서 네트워크 상태 조회하는 방법
웹 소스 가져오는 방법
XML, DOM파서 사용하는 방법
<eng>
Checking Network at Mobile Android Method
Getting Web Code Method
XML, DOM Parsing Method
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 지정
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();
}