0

テキスト行をtxtファイルに追加、読み取り、書き込み、リストに表示できるアンドロイド用の簡単なプログラムを作成しています。saveFile(); を取得しました。todo_items 配列をファイル todo.txt に書き込む関数。しかし、何らかの理由で、リストに実際のテキスト行を表示する代わりに数字が表示されます...たとえば、「犬に餌をやる、猫に餌をやる、魚に餌をやる、鳥に餌をやる」を追加してから、結果の3Dアイテムを削除します私は「0、1、2」。理由がわからない。ここに関数のコードがあります

<?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>
4

1 に答える 1

0

ええと、配列内のすべてのキー、つまり 0、1、2、... にfor(var item in array)設定します。item

実際のアイテムを取得するには、次のいずれかを実行する必要があります。

for(var item:String in todo_items)
{
    fs.writeUTFBytes(todo_items[item] + "\n")
}

また

for each(var item:String in todo_items)
{
    fs.writeUTFBytes(item + "\n")
}

2番目の方がきれいなのでお勧めします。

于 2012-07-25T09:43:11.077 に答える