티스토리 뷰
안드로이드에서 웹서버로 통신할 때 주로 사용하는 포맷이 JSON이다.
웹에 접속해서 데이터를 가져오는 방식은 안드로이드 네트워크 연결하기 (Network On Main Thread Exception 처리) 을 참고하기 바란다.
이렇게 가져온 데이터가 JSON 타입일 경우, 안드로이드에서 이를 처리해서 배열에 저장해 보자.
웹에서 가져온 데이터를 JSONArray로 변환하고, For문을 중첩해서 돌리면서 각 항목의 값을 가져오는 것이다.
그리고 String[][] 2차원 배열에 가져온 값을 저장하는 형태로 매우 간단하다.
소스를 한번 살펴보자.
2번째 줄에서 매개변수로 넘어온 result라는 문자열을 JSONArray 타입으로 변환한다.
8-15째 줄에서 JSONArray의 값을 읽어와 2차원 String 배열에 저장하고 있다.
마지막으로 LogCat을 이용해 결과를 확인하기 위해 Log.i() 함수로 저장된 값을 출력한다.
실제 안드로이드 프로젝트에서 테스트해보려면
위 소스를 안드로이드 네트워크 연결하기 (Network On Main Thread Exception 처리)의
전체 소스에서 67-68 줄 사이(onPostExecute 메소드)에 넣고 돌려보기 바란다.
다음과 같은 결과를 얻을 수 있을 것이다.
참고로 JSON 변환을 하다보면, 다음과 같은 에러메시지를 만날 때가 있다.
org.json.JSONArray cannot be converted to JSONObject
JSONArray 타입을 JSONObject로 변환할 수 없다는 것으로 두 타입의 차이를 조금 이해할 필요가 있다.
JSONObject는 {이름:값, 이름:값 ... }로 구성된 하나의 JSON 객체를 나타낸다.
반면 JSONArray는 [{이름:값, 이름:값 ...}, {이름:값, 이름:값 ...}, {이름:값, 이름:값 ...}, ... ]와 같이 JSONObject가 여러개 중첩되어 있는 것이다.
이 차이를 안다면 데이터 문자열의 형태에 따라 JSONObject나 JSONArray로 변환함으로써 위와 같은 오류를 만들지는 않을 수 있을 것이다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 스튜디오 버전 설정, 아이콘 생성 그리고 릴리즈 빌드하기 (0) | 2015.05.29 |
---|---|
이미지로 제공하는 안드로이드 실시간 검색어 앱 추천~ (0) | 2015.05.23 |
안드로이드 네트워크 연결하기 (Network On Main Thread Exception 처리) (1) | 2015.05.20 |
웹에서 액티비티 호출하기 (1) | 2015.05.06 |
안드로이드 웹뷰(WebView) 사용하기 (0) | 2015.05.04 |