我是AS 3.0这一部分的新手。我找到了李·伯罗斯(Lee Burrows)的例子。这工作正常,但我需要发送一个复杂的对象数组或至少是多维数组。而且我无法让它工作。
挣扎了一个星期。谁能帮忙?
以下是代码的各个部分:
private function netHandler(event:NetStatusEvent):void
{
//update UI
outputText.text += "[EVENT]n" + event.info.code + "n";
//handle event
switch (event.info.code)
{
//connection succeeded so setup a group
case "NetConnection.Connect.Success" :
ns1 = new NetStream(netConn);
setupGroup();
break;
//group setup succeeded so enable submit
case "NetGroup.Connect.Success" :
submitButton.enabled = true;
break;
//posting received so add to output
case "NetGroup.Posting.Notify" :
var myObjectList:Array = new Array();
myObjectList = event.info.message;
dl.dataProvider = myObjectList[0];
dl.rowCount = myObjectList[0].length;
gd.dataProvider = myObjectList[1];
gd.rowCount = myObjectList[1].length;
outputText.text += "[RECEIVED]n" + event.info.message.txt + "n";
break;
}
}
我收到错误
类型错误: 错误 #1034: 类型强制失败: 无法将Object@7bc4dd9转换为 fl.data.DataProvider。
您是否考虑过使用 JSON?
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html
只需使用 stringify() 将其转换为 JSON,另一端的 parse() 即可对其进行解码。如果"另一端"不是AS3,您应该能够以任何语言轻松解析JSON。
如果您将数组/矢量/对象转换为 Flash 现在本机支持的 JSON 对象,则可以轻松完成此操作。
我这样做的方法是让 ByteArray 对象将数组序列化为 AMF(自动),压缩并发送:
发送数据:
var byteArray:ByteArray = new ByteArray();
var array:Array = [[new Date(), 24], [new Shape(), 24.5], 1 / 2];
byteArray.writeObject(array);
byteArray.compress(CompressionAlgorithm.LZMA); //Optional
netGroup.sendTo-AllNeighbors/nearest/Neighbor(byteArray);
接收数据:
//private function onReceiveData(data:Object):void
var byteArray:ByteArray = data as ByteArray;
byteArray.uncompress(CompressionAlgorithm.LZMA); //if compressed
var array:Array = byteArray.readObject();
trace("@", getTimer(), ": ", array, "n");
输出:
@2676: Sun Sep 22 02:41:36 GMT+0300 2013,24,[object Object],24.5,0.5
当然,如果需要在 AS3 应用程序之外,则需要使用第三方库(有很多!)来使用其他语言。
您的另一种选择是使用 JSON,但我想要传输的数据会大得多,解析它需要更多的时间(字符串操纵与优化的二进制数据访问!
编辑:要序列化和回读自定义类(作为自定义类而不是泛型对象),您应该事先注册一个类别名,如下所示:
import flash.net.registerClassAlias
registerClassAlias("com.CustomClass", CustomClass);