質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.05%

CSVファイルの中身をtextViewに表示させたい。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 437

nabebe

score 8

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

このように値を受け渡そうとしたのですが実際は値は出力されませんでした。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • stdio

    2019/03/13 09:36

    まず、デバック関数を使いCSVの中身をしっかり取得できているかを確認しましょう。

    キャンセル

  • nabebe

    2019/03/13 09:52

    stdio様
    解答ありがとうございます。
    デバック関数というのは
    https://appcoding.net/log-kotlin/
    こちらのサイトで述べられているものでしょうか?

    キャンセル

  • keicha_hrs

    2019/03/13 10:59

    当該書籍は所有していませんが、書籍を参考にしているのなら具体的なコードまで記されているのではありませんか?その通りにコーディングしたのに意図した結果にならないということなのでしょうか?

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る