我开始使用7个阵列:
private var listArray:Array = new Array();
private var oneArray:Array = new Array();
private var twoArray:Array = new Array();
private var threeArray:Array = new Array();
private var fourArray:Array = new Array();
private var fiveArray:Array = new Array();
private var sixArray:Array = new Array();
listArray包含6个文本文件名的字符串元素。 类似的东西:
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
目前所有其他阵列都是空的。
我写了一个这样的for循环:
for (var i:int = 0; i < listArray.length; i++)
{
var urlRequest:URLRequest = new URLRequest(File.documentsDirectory.resolvePath(listArray[i]).url);
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
try
{
urlLoader.load(urlRequest);
}catch (error:Error){
trace("Cannot load : " + error.message);
}
}
如果没有for循环,我知道我只能对一个数据数组执行此操作:
private function completeHandler(e:Event):void
{
oneArray = e.target.data.split(/\r\n/);
}
在这里,我想尝试一些工作:
oneArray包含来自1.txt
的数据twoArray包含来自2.txt
的数据等......
sixArray包含来自6.txt
的数据问题:
我知道completeHandler函数只在for循环六次后执行。
无论如何我可以将正确的数据输入正确的数组。
由于
答案 0 :(得分:0)
我建议你使用词典。
创建新词典:
var dict:Dictionary = new Dictionary();
将URLLoader类的实例绑定到文件名:
var urlRequest:URLRequest = ...
var urlLoader:URLLoader = new URLLoader();
dict[urlLoader] = listArray[i];
在completeHandler
中,您可以获取文件名:
trace(dict[e.currentTarget]);
添加if
语句以达到目标。
if (dict[e.currentTarget] == "1.txt")
oneArray = e.target.data.split(/\r\n/);
else if (dict[e.currentTarget] == "2.txt")
twoArray = e.target.data.split(/\r\n/);
...
答案 1 :(得分:0)
由于您使用AIR从文件系统加载数据,因此您不必异步执行此操作。您可以像这样同步加载它:
function readTxtList(url:String):Array {
var file:File = File.documentsDirectory.resolvePath(url);
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
var text:String = fileStream.readUTFBytes(fileStream.bytesAvailable);
fileStream.close();
return text.split("\r\n");
}
现在您可以直接分配每个值:
var oneArray:Array = readTxtList("1.txt");
var twoArray:Array = readTxtList("2.txt");
// etc