Im making a simple programm for android, what can add, read and write text lines into a txt file and show it on the List.
I got saveFile(); function what writes the todo_items Array to the file todo.txt.
But for some reason instead of showing the real text lines in the list it gives me numbers…
For example when i add “Feed dog, feed cat, feed fish, feed bird” and then Delete the 3d item in the result it gives me “0, 1, 2”. Have no clue why. Here is the code of the function
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
height="494" creationComplete="readFile()"
>
<fx:Script>
<![CDATA[
public var intTemp:int;
import mx.collections.ArrayCollection;
[Bindable] public var todo_items:ArrayCollection;
private function readFile():void
{
var todoFile:File =File.applicationStorageDirectory.resolvePath("todo.txt");
var fs:FileStream = new FileStream();
fs.open(todoFile, FileMode.READ);
var result:String = fs.readUTFBytes(fs.bytesAvailable);
var items:Array = result.split("\n");
items.pop();
todo_items = new ArrayCollection(items);
fs.close();
}
private function writeFile():void
{
var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt");
var fs:FileStream = new FileStream();
fs.open(todoFile, FileMode.APPEND);
fs.writeUTFBytes(task_txt.text + "\n");
fs.close();
readFile();
}
private function deleteItem():void
{
var todoFile:File =File.applicationStorageDirectory.resolvePath("todo.txt");
var fs:FileStream = new FileStream();
fs.open(todoFile, FileMode.READ);
var result:String = fs.readUTFBytes(fs.bytesAvailable);
var items:Array = result.split("\n");
items.pop();
todo_items = new ArrayCollection(items);
todo_items.removeItemAt(intTemp);
fs.close();
safeFile();
}
private function safeFile():void
{
var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt");
var fs:FileStream = new FileStream();
fs.open(todoFile, FileMode.WRITE);
for(var item:String in todo_items)
{
fs.writeUTFBytes(item + "\n")
}
fs.close();
readFile();
}
]]>
</fx:Script>
<s:List id="todo_list" left="10" right="10" top="142" bottom="87" dataProvider="{todo_items}"/>
<s:Button left="11" right="10" top="69" height="65" label="Save task" click="writeFile(); task_txt.text = null"
enabled="{task_txt.text.length > 0}"/>
<s:TextInput id="task_txt" left="10" right="10" top="10" height="51" prompt="Specify a task"/>
<s:Button left="10" right="10" bottom="14" label="Delete"
click="intTemp = todo_list.selectedIndex; todo_items.removeItemAt(todo_list.selectedIndex); deleteItem()"
enabled="{todo_list.selectedIndex != -1}"/>
</s:Application>
Well,
for(var item in array)setsitemto all the keys in the array, i.e. 0, 1, 2, …For getting the actual items, you need to do one of the following:
or
I’d recommend the second because its cleaner.