はじめに
外部からAPIとか使ってJsonを持ってくる方式については多かったけども、
内部に置く方法が意外と少なかったから覚書程度に書く。
内容
- AndroidでJsonを使おう
- AndroidStudioの内部にJsonを置いて使う方法
Json準備
Jsonファイル
今回使うJsonファイル
Sample.json
{
"sample": [
{
"name": "Andy",
"age": 31,
"gender": false,
"other": ""
},
{
"name": "Bob",
"age": 14,
"gender": false,
"other": "Student"
},
{
"name": "Carry",
"age": 22,
"gender": true,
"other": "Rich"
},
{
"name": "Daniel",
"age": 1,
"gender": false,
"other": "Baby"
},
{
"name": "Emily",
"age": 80,
"gender": true,
"other": "Grand"
}
]
}
設置
AndroidStudio上でAssetフォルダを作成。
画像を参考に。
作ったAssetフォルダの中にJsonファイルを設置。
読みこみ
Jsonからのデータ読み込み
String型のデータで読み込む。
MainActivity.kt
val assetManager = resources.assets //アセット呼び出し
val inputStream = assetManager.open("Sample.json") //Jsonファイル
val bufferedReader = BufferedReader(InputStreamReader(inputStream))
val str: String = bufferedReader.readText() //データ
strの中にJsonのデータがString型で入る。
Jsonで使う
結構派閥あるから、他にもやり方はいっぱいあると思う。
MainActivity.kt
try {
val jsonObject = JSONObject(str)
val jsonArray = jsonObject.getJSONArray("sample")
for (i in 0 until jsonArray.length()) {
val jsonData = jsonArray.getJSONObject(i)
Log.d("Check", "$i : ${jsonData.getString("name")}")
}
} catch (e: JSONException) {
e.printStackTrace()
}
実行結果
D/Check: 0 : Andy
D/Check: 1 : Bob
D/Check: 2 : Carry
D/Check: 3 : Daniel
D/Check: 4 : Emily
このデータを他に色々使おうねっていう。
部分説明
"sample"
の部分はjson内のテーブル(?)名
jsonObject.getJSONArray("sample")
"name"
の部分で引っ張るデータが変わる。
引っ張りたい型名によってgetが変わる
jsonData.getString("name")
jsonData.getInt("age")
jsonData.getBoolean("gender")
おしまい
ほとんど自分のための覚書だからわかりづらいとかあれば修正します。
使ったプログラム(一応)
Activity
MainActivity.kt
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.json.JSONException
import org.json.JSONObject
import java.io.BufferedReader
import java.io.InputStreamReader
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val assetManager = resources.assets
val inputStream = assetManager.open("Sample.json")
val bufferedReader = BufferedReader(InputStreamReader(inputStream))
val str: String = bufferedReader.readText()
Log.d("check", str)
try {
val jsonObject = JSONObject(str)
val jsonArray = jsonObject.getJSONArray("sample")
val layout = mainLinerLayout
for (i in 0 until jsonArray.length()) {
val jsonData = jsonArray.getJSONObject(i)
Log.d("Check", "$i : ${jsonData.getString("name")}")
}
} catch (e: JSONException) {
e.printStackTrace()
}
}
}
Json
(上に書いたのと一緒)
Sample.json
{
"sample": [
{
"name": "Andy",
"age": 31,
"gender": false,
"other": ""
},
{
"name": "Bob",
"age": 14,
"gender": false,
"other": "Student"
},
{
"name": "Carry",
"age": 22,
"gender": true,
"other": "Rich"
},
{
"name": "Daniel",
"age": 1,
"gender": false,
"other": "Baby"
},
{
"name": "Emily",
"age": 80,
"gender": true,
"other": "Grand"
}
]
}