evals
evals

Reputation: 1869

read lines from txt file into listview

i want to read lines from txt file and show each line as item in a list view i've tried several ways but nothing worked for me here is my code :

private var fileDir:File?=null
private var items: ArrayList<String>? = null
private var itemsAdapter: ArrayAdapter<String>? = null
private var listVIL: ListView? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_todo1)
//create file txt if not exist
    fileDir = File(Environment.getExternalStorageDirectory(), "todo.txt")
    if (!fileDir!!.exists()) {
        fileDir?.createNewFile()
    }
//read items from the file
    readFromFile()
listVIL = findViewById(R.id.listVI)
    items = ArrayList()
    itemsAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
    listVIL?.adapter=itemsAdapter
}

i tried this function but there is something missed , nothing shown at the list view although no exception was thrown

fun readFromFile() {
    try {
        var br = BufferedReader(InputStreamReader(FileInputStream(fileDir)))
    items?.addAll(br.readLines())
    br.close()
        }
    catch (e:Exception){
        Toast.makeText(applicationContext,e.toString(),Toast.LENGTH_LONG).show()
    }
    }

here i tried another way but not working

fun readFromFile() {
    try {
        var br = BufferedReader(InputStreamReader(FileInputStream(fileDir)))
        var hasNextLine = true
        while (hasNextLine) {
            var line = br.readLine()
            items?.add(line)
            hasNextLine = line != null
        }
        listVIL?.adapter = itemsAdapter
        br.close()
        itemsAdapter?.notifyDataSetChanged()
        }
    catch (e:Exception){
        Toast.makeText(applicationContext,e.toString(),Toast.LENGTH_LONG).show()
    }
}

Upvotes: 0

Views: 149

Answers (2)

Leo Aso
Leo Aso

Reputation: 12463

Kotlin has a File.readLines method you can use instead of writing one yourself

private lateinit var fileDir: File
private lateinit var items: MutableList<String>
private lateinit var itemsAdapter: ArrayAdapter<String>
private lateinit var listVIL: ListView

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_todo1)
    listVIL = findViewById(R.id.listVI)

    try {
        fileDir = File(Environment.getExternalStorageDirectory(), "todo.txt")
        if (!fileDir.exists()) fileDir.createNewFile()
        items = ArrayList(file.readLines())
        itemsAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
        listVIL.adapter = itemsAdapter
    } catch (e: Exception) {
        Toast.makeText(applicationContext,e.toString(),Toast.LENGTH_LONG).show()
    }
}

Upvotes: 1

user8959091
user8959091

Reputation:

Move readFromFile() right after items = ArrayList()

Upvotes: 1

Related Questions