Reputation: 1869
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
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