专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Flex

flex共享对象存取本土数据实例(中级)

发布时间:2011-06-27 19:45:12 文章来源:www.iduyao.cn 采编人员:星星草
flex共享对象存取本地数据实例(中级)
1、shareObj.mxml 
<?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>
	
	<mx:Button id="readBut" x="100" y="100" label="read" click="trace(sharedObj.myReadValue());"/>
	<mx:Button id="saveBut" x="200" y="100" label="save" click="sharedObj.mySaveValue('tenten', 10000);"/>
	<mx:Button id="clearBtn" x="300" y="100" label="clear" click="sharedObj.myClearValue();"/>
	
</s:Application>





2、 MySharedObj.as

package{
	import flash.events.NetStatusEvent;
	import flash.net.SharedObject;
	import flash.net.SharedObjectFlushStatus;
	
	public class MySharedObj{
		private var sharedObj:SharedObject;
		
		public function MySharedObj(){
			sharedObj = SharedObject.getLocal("haha");    //生成一个本地共享对象sharedObj,haha是要保存在本地的文件的名字,后缀名为.sol
		}
		
		/*read  if not then this value will return null*/
		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 "*****";
		}
		
		/*save*/
		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("access saved");
						break;
				}
			}
		}
		
		/*clear*/
		public function myClearValue():void{
			/**
			 * clear方法
			 * 对于本地共享对象,清除所有数据并从磁盘删除共享对象。
			 * 对共享对象的引用仍然处于活动状态,但其数据属性(sharedObj.data的所有属性)被删除。
			 * */
			sharedObj.clear();    
			delete sharedObj.data.savedValue;
		}
		
		/*SharedObjectFlushStatus.PENDING*/
		private function nowFlushStatus(event:NetStatusEvent):void{
			switch(event.info.code){
				case "SharedObject.Flush.Success":    //flush auccess
					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);
		}
		
	}
}

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: