CSVファイルの中身をtextViewに表示させたい。
ここに質問の内容を詳しく書いてください。
質問失礼いたします。
現在Kotlin実践プログラミングという書籍にて、CSVデータを出力するコードを書こうとしています。
ゴールとしては一番下の MainactivityというファイルのtextViewに取得したCsvデータの中身を代入したいのですがどうすればよいでしょうか?
該当のソースコード
csvファイル
id,名前,値段 1,リンゴ,100 2,バナナ,98 3,すいか,200 4,メロン, 5,もも,300
データ読み込みファイルLoader.kt
package com.example.myapplication import java.io.File interface Loader { // テキストを読み込む外部システムによっては、文字列を返さないことも想定できるので nullable とする fun load(): String? } class FileLoader(private val file: File): Loader { init { // 事前条件であるファイルの存在性を要求する require(file.exists()) } override fun load(): String? = file.readText() }
出力ファイルWriter.kt
package com.example.myapplication import java.io.File interface Writer { // 出力するデータは存在しなければならないのでNon-Nullとする fun write(formatter: Formatter) } class StdOutWriter: Writer { override fun write(formatter: Formatter) { println(formatter.format()) } }
フォーマッターファイルFormatter.kt
package com.example.myapplication interface Formatter { val data: String fun format(): String } class TextFormatter( override val data: String ) : Formatter { override fun format(): String = data }
上記のファイルを実行するファイルApp.kt
package com.example.myapplication import java.io.File object App { @JvmStatic fun main(args: Array<String>){ val filePath = "assets/item.csv" val content = FileLoader(File(filePath).also{ if(!it.exists()){ throw IllegalArgumentException("$filePath にファイルがありません") } }).load() ?: throw java.lang.IllegalArgumentException("ファイルの中身がありません") val formatter = TextFormatter(content) val writer = StdOutWriter() writer.write(formatter) } }
値を代入したいファイルMainActivity.kt
package com.example.myapplication class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) textView.text = } } } }
試したこと
App.ktの
val formatter = TextFormatter(content)
の中にCSVファイルの中身が入っていると思うので、
object App {}の外で文字列の変数を定義(MainActivity.ktで利用するため)
var csvdata: String = ""
object App {}内にて
csvdata = formatter.toString()
としてcsvデータを取得し
MainActivity.ktでtextView.text = csvdata
このように値を受け渡そうとしたのですが実際は値は出力されませんでした。
あなたの回答
tips
プレビュー