我是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;
}
}
我收到错误
TypeError:错误#1034:类型强制失败:无法将Object @ 7bc4dd9转换为fl.data.DataProvider。
答案 0 :(得分:1)
你考虑过使用JSON吗?
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/JSON.html
只需使用stringify()将其转换为JSON,并使用另一侧的parse()对其进行解码。 如果“另一方”不是AS3,您应该能够以任何语言轻松解析JSON。
答案 1 :(得分:0)
如果将Array / Vector / Object转换为Flash现在支持的JSON对象,则可以轻松完成。
答案 2 :(得分:0)
我要做的就是让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);