본문 바로가기
안드로이드/네트워크

안드로이드 json 사용하기

by 김어찐 2022. 6. 26.
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