728x90
JavaScript Object Notation의 약자로 JavaScript 언어에서 객체를 표현하는 문법을 사용해 데이터를 표현하는 비 표준 문서이다.
다양한 데이터 타입을 표현할 수 있어 많이 사용하는 문서 양식이다.
package com.example.httpjson
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import org.json.JSONArray
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
thread {
val site = "http://192.168.0.128:8080/json.jsp"
val url =URL(site)
val conn = url.openConnection() as HttpURLConnection
// 문자열 데이터를 읽어온다
val isr = InputStreamReader(conn.inputStream,"UTF-8")
val br = BufferedReader(isr)
var str:String? = null
val buf =StringBuffer()
do {
str = br.readLine()
if(str!=null){
buf.append(str)
}
} while (str != null)
val data = buf.toString()
// json 데이터 분석
runOnUiThread{
textView.text=""
}
// json 배열 생성
val root = JSONArray(data)
// 배열의객체 개수만큼 반복한다.
for(i in 0 until root.length()){
// i 번째 JSON 객체를 추출한다
val obj = root.getJSONObject(i)
// 데이터를 추출한다.
val data1 = obj.getString("data1")
val data2 = obj.getInt("data2")
val data3 = obj.getDouble("data3")
runOnUiThread{
textView.append("data1 : $data1\n")
textView.append("data2 : $data2\n")
textView.append("data3 : $data3\n")
}
}
}
}
}
}
퍼미션 및 http 통신 허용
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.httpjson">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.HttpJSON"
tools:targetApi="31"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
JSON 데이터
[
{
"data1" : "문자열1",
"data2" : 100,
"data3" : 11.11
},
{
"data1" : "문자열2",
"data2" : 200,
"data3" : 22.22
},
{
"data1" : "문자열3",
"data2" : 300,
"data3" : 33.33
},
{
"data1" : "문자열4",
"data2" : 400,
"data3" : 44.44
},
{
"data1" : "문자열5",
"data2" : 500,
"data3" : 55.55
},
{
"data1" : "문자열6",
"data2" : 600,
"data3" : 66.66
}
]
728x90
'안드로이드 > 네트워크' 카테고리의 다른 글
안드로이드 xml 문서 사용 (0) | 2022.06.26 |
---|---|
안드로이드 서버 미디어 가져오기 (0) | 2022.06.26 |