[size=large]MySharedObj.as[/size]
[size=large]shareObj.mxml[/size]
package FlexLearn.shareObj
{
import flash.events.NetStatusEvent;
import flash.net.SharedObject;
import flash.net.SharedObjectFlushStatus;
/**flex共享对象类**/
public class MySharedObj
{
private var sharedObj:SharedObject;
public function MySharedObj()
{
sharedObj = SharedObject.getLocal("haha"); //生成一个本地共享对象sharedObj,haha是要保存在本地的文件的名字,后缀名为.sol
}
/**读取**/
public function myReadValue():String{
var str:String = sharedObj.data.selfValue;
var arr:Array = sharedObj.data.selfArr;
trace(sharedObj.size); //共享对象当前所存储的总字节大小(读取效率低,尽量别用)
/**
* 如果当前共享对象没有存储东西(即size属性值为0),或执行了clear方法,所有的自定义属性都没了
* 则所有[sharedObj.data.自定义属性]的值都为undefined;如sharedObj.data.selfValue
**/
trace(sharedObj.data); //output [object Object]
trace(sharedObj.data.selfValue); //if(size==0){output tenten}else{undefined}
// trace(sharedObj.data.selfArr[0].B); //output helloworld劳动节
return "*****";
}
/**
* 保存共享数据
* sharedValue 字符串
* bufLength 缓冲值
*/
public function mySaveValue(sharedValue:String, bufLength:Number):void{
sharedObj.data.selfValue = sharedValue; //存储了一个字符串
/**
* SharedObject对象可以保存各种格式的数据
* 一种格式的数据对象都可以用一种SharedObject对象(sharedObj.data)的自定义属性来存储
* (如selfAtt属性存储了一个数组arr)。
* 如果一个共享对象的属性目前还没存储数据,则此属性的返回值为undefined
* */
var arr:Array = new Array();
arr.push({A:"你好呀", B:"helloworld劳动节", C:"108"}); //这是一个数据结构(要保存的数据1)
sharedObj.data.selfArr = arr; //selfArr是自定义乱起的共享对象(sharedObj.data)的属性名(乱起的前提是在保存的时候乱)
/**显示的把共享对象写入本地磁盘(flush方法),不然可能会把共享对象当做垃圾回收掉**/
var flushStatus:String = null;
try{
flushStatus = sharedObj.flush(bufLength); //bufLength表示缓冲值
}catch(error:Error){
trace("error message: " + error.message);
}
if(flushStatus != null){ /*判断共享对象是否正确的写入了本地磁盘*/
switch(flushStatus){
//磁盘大小不够
case SharedObjectFlushStatus.PENDING:
sharedObj.addEventListener(NetStatusEvent.NET_STATUS, nowFlushStatus);
break;
//成功保存
case SharedObjectFlushStatus.FLUSHED:
trace("success saved");
break;
}
}
}
private function nowFlushStatus(event:NetStatusEvent):void{
switch(event.info.code){
case "SharedObject.Flush.Success": //flush success
trace("User granted permission, value saved 成功");
break;
case "SharedObject.Flush.Failed": //flush failed
trace("User denied permission, value not saved 失败");
break;
}
sharedObj.removeEventListener(NetStatusEvent.NET_STATUS, nowFlushStatus);
}
/*clear 清除本地共享对象shareObj*/
public function myClearValue():void{
/**
* clear方法
* 对于本地共享对象,清除所有数据并从磁盘删除共享对象。
* 对共享对象的引用仍然处于活动状态,但其数据属性(sharedObj.data的所有属性)被删除。
* */
sharedObj.clear();
delete sharedObj.data.savedValue;
}
}
}
[size=large]shareObj.mxml[/size]
<?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"
xmlns:mx="library://ns.adobe.com/flex/halo"
minWidth="1024" minHeight="768"
creationComplete="init();">
<fx:Script>
<![CDATA[
private var sharedObj:MySharedObj;
private function init():void{
sharedObj = new MySharedObj();
}
]]>
</fx:Script>
<s:Button id="readBut" x="100" y="100" label="read" click="trace(sharedObj.myReadValue());"/>
<s:Button id="saveBut" x="200" y="100" label="save" click="sharedObj.mySaveValue('tenten', 0);"/>
<s:Button id="clearBtn" x="300" y="100" label="clear" click="sharedObj.myClearValue();"/>
</s:Application>