티스토리 뷰
반응형
Thread를 사용한 http 통신을 해서 서버에서 데이터를 가져오는 예제입니다.
자바에서 기본으로 제공되는 문법을 사용할 것입니다.
깃허브 api에서 데이터 가져오기
inner class GitHubThread : Thread() {
override fun run() {
val url = URL("https://api.github.com/zen")
val connection = url.openConnection()
val input = connection.getInputStream()
val inputStreamReader = InputStreamReader(input, "UTF-8")
val bufferReader = BufferedReader(inputStreamReader)
var str: String? = null
val stringBuffer = StringBuffer()
do {
str = bufferReader.readLine()
if (str != null) {
stringBuffer.append(str)
}
} while (str != null)
val data = stringBuffer.toString()
runOnUiThread {
textView.text = data
}
}
}
val url = URL("https://api.github.com/zen")
주소를 관리하는 객체를 만들어서 담아줬습니다.
val connection = url.openConnection()
그리고 접속을 합니다.
문자열을 읽어오기 위해서 Stream을 사용하겠습니다.
val input = connection.getInputStream()
val inputStreamReader = InputStreamReader(input, "UTF-8")
val bufferReader = BufferedReader(inputStreamReader)
라인 단위로 읽어오기 위해서 BufferedReader을 사용하였습니다.
var str: String? = null
val stringBuffer = StringBuffer()
do {
str = bufferReader.readLine()
if (str != null) {
stringBuffer.append(str)
}
} while (str != null)
그리고 데이터를 읽어오고 읽어오면 StringBuffer에 저장하는 코드입니다.
실행을 하면 아래와 같이 동작합니다.
XML 데이터 사용하기
서버에서 받은 xml 데이터를 사용하도록 하겠습니다.
아래와 같은 xml에서 데이터를 추출하겠습니다.
<data>
<item>
<name>이름1</name>
<age>나이1</age>
</item>
<item>
<name>이름2</name>
<age>나이2</age>
</item>
</data>
아래는 전체 코드입니다.
val url = URL("링크")
val connection = url.openConnection()
val input = connection.getInputStream()
val factory = DocumentBuilderFactory.newInstance()
val builder = factory.newDocumentBuilder()
val document = builder.parse(input)
val root = document.documentElement
val itemList = root.getElementsByTagName("item")
for (i in 0 until itemList.length) {
val itemElement = itemList.item(i) as Element
val nameList = itemElement.getElementsByTagName("name")
val ageList = itemElement.getElementsByTagName("age")
val name = nameList.item(0) as Element
val age = ageList.item(0) as Element
}
val factory = DocumentBuilderFactory.newInstance()
val builder = factory.newDocumentBuilder()
val document = builder.parse(input)
xml 데이터를 가져오기 위해서는 DocumentBuilderFactory를 사용해야 됩니다.
val root = document.documentElement
<data></data>로 감싸진 전체 객체를 가져옵니다.
val itemList = root.getElementsByTagName("item")
그리고 원하는 tag의 list 값을 가져옵니다.
for (i in 0 until itemList.length) {
val itemElement = itemList.item(i) as Element
val nameList = itemElement.getElementsByTagName("name")
val ageList = itemElement.getElementsByTagName("age")
val name = nameList.item(0) as Element
val age = ageList.item(0) as Element
}
그리고 list안에 tag 객체를 가져와서 내용을 추출하는 형식으로 되어있습니다.
JSON 데이터 사용하기
서버에서 받은 json 데이터를 사용하도록 하겠습니다.
데이터는 아래와 같습니다.
[
{
"name" : "ImLeaf"
"age" : 19
},
{
"name" : "Im-Tae"
"age" : 7
}
]
val url = URL("링크")
val connection = url.openConnection()
val input = connection.getInputStream()
val inputStreamReader = InputStreamReader(input)
val bufferReader = BufferedReader(inputStreamReader)
var str: String? = null
val stringBuffer = StringBuffer()
do {
str = bufferReader.readLine()
if (str != null) {
stringBuffer.append(str)
}
} while (str != null)
깃허브 api에서 데이터를 가져온 예제와 사용법은 같습니다.
하지만 데이터를 가져온 다음에 가공을 해줘야 됩니다.
val root = JSONArray(stringBuffer.toString())
for (i in 0 until root.length()) {
val obj = root.getJSONObject(i)
val name = obj.getString("name")
val age = obj.getInt("age")
}
JSONArray와 getJSONObject를 통해 데이터를 가공해주면 됩니다.
반응형
'알려주는 이야기 > 안드로이드' 카테고리의 다른 글
안드로이드 Keystore 정보 숨기기 (1) | 2020.08.28 |
---|---|
안드로이드 Bottom Navigation View 예제 (0) | 2020.08.24 |
안드로이드 서비스 (0) | 2020.08.23 |
안드로이드 시스템 메시지 띄우기 (0) | 2020.08.23 |
안드로이드 Broad Cast Receiver (0) | 2020.08.22 |
댓글