SharedObject

在Web应用中,运行时有些数据需要暂存到本地磁盘中,可以被整个应用获取,也可以在下一次打开应用时获取。Flex中,可以使用共享对象(Shared Object)来实现这样的功能。共享对象有点类似浏览器的cookies,可以为应用暂存一些数据。它与cookies相比,具有如下的优势。
它是不会过期的。
共享的内容,可以由用户指定,可以是字符,可以是数组。
存储位置也可以由应用定义,但必须在用户目录下。
默认情况下,可以使用的存储空间为100K,该数值可以利用Flash Player中的Global Storage Settings panel设定。
只作为本地数据,不会被传输到服务端。该共享对象可以被同一域中的Flex应用共享。
SharedObject类的常用属性如表所示。
属性名 类型  说明
data Object  共享对象总是以熟悉、值的方式存储数据,可以将该data看作属性的集合,在获得共享数据时,总是使用data属性名获得。
size unit  当前共享对象数据的大小,以bytes为单位

SharedObject类的常用方法包括创建共享对象、删除共享对象等,如下所示。
 clear():清除共享对象数据。
 flush():将共享对象写入客户端的文件中。
 getLocal():该方法用来获取共享对象,其接口如下所示:
public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject
创建共享对象不能使用MXML,只能在ActionScript中创建。创建共享对象时使用getLocal()方法,该方法接口如下所示,其中pathName为可选项。
SharedObject.getLocal("objectName" [, pathname]): SharedObject
下面的例子创建了一个共享对象myShare。
public var myShare:SharedObject;
myShare = SharedObject.getLocal("myData");
在创建了共享对象后,需要为共享对象进行赋值,格式如下所示:
sharedObject_name.data.variable = value;
例如下面的代码为userName赋值。
myShare.data.userName = “silence”;
删除共享对象时,需要使用ShareObject()类中的clear()方法。
mySO.clear();


本地共享对象有时被称作“Flash Cookie”,它是一个数据文件,可以由所访问的站点在您的计算机上创建。在Flash中提供了下面的操作本地对象的方法:
SharedObject.clear() 删除本地共享对象;
SharedObject.flush() 立即把共享对象数据写入本地文件;
SharedObject.getLocal() 创建或连接本地共享对象;
SharedObject.getSize() 取得本地共享对象的指定大小数据。

主要看下面的这个方法:
SharedObject.getLocal(objectName [, localPath])
其中objectName是该共享对象的名字,localPath即共享对象所在路径。

// 创建一个本地保存数据的对象
var cookie:Object = SharedObject.getLocal("cookie");

方法会在默认的路径下生成一个cookie.sol文件。文件的默认大小不能超过100k,当然可以通过鼠标右击flash窗口,选择设置来管理或者禁用您的本地共享对象。可以让每个flash独立使用自己的SharedObject,当然也可以做一个全域的SharedObject让所有的swf使用,只要给localPath 赋值 "/"。
在win2k和 win xp中,默认路径为C:/Documents and Settings/username/Application Data/Macromedia/Flash Player/#SharedObjects (username为机器的用户名)

* Windows XP:
         o For Web sites: C:/Documents and Settings/<user>/Application Data/Macromedia/Flash Player/#SharedObjects/<random code>/<domain>/<path>/<object name>.sol
         o For AIR Applications, C:/Documents and Settings/<user>/Application Data/<AIR Application Reverse Domain Name>/Local Store/#SharedObjects/<flash filename>.swf/<object name>.sol
   * Windows Vista
         o C:/Users/username/<user>/AppData/Roaming/Macromedia/Flash Player/#SharedObjects/<domain>/<path>/<flash filename>.swf/<object name>.sol
   * Mac OS X:
         o For Web sites, Macintosh HD:Users:<user>:Library:Preferences:Macromedia:Flash Player:#SharedObjects:<random code>:<domain>:<path from webserver>/<object name>.sol
         o For AIR Applications, Macintosh HD:Users:<username>:Library:Preferences:<AIR Application Reverse Domain Name>:Local Store:#SharedObjects:<flash filename>.swf/<object name>.sol
   * Linux/Unix:
         o /home/<User>/.macromedia/Flash_Player/#SharedObjects/<domain>/<path>/<flash filename>.swf/<object name>.sol

每个对象都会有一个只读属性data,用来存储被存储到“数据特性”中的对象的属性,这些属性可以共享/存储,每一个属性可以是各种基础数据类型(数组,数字布尔值等)对象。现在cookie已经存储在SharedObject中了,以后你可以通过对SharedObject数据属性的存取来实现对cookie的存取。例如:

cookie.data.name = "晓次";
cookie.data.password = "1234";
cookie.data.rememberPassword = true;

共享对象的写入会在应用程序退出时自动执行,也可以通过cookie.flush()强制写入。

在Macromedia的文档中可以知道,SharedObjects只能存储基本的ActionScript或者JavaScript类型(Array, Number, Boolean, String, 等),其实也可以使用SharedObjects来存储用户自己定义的类.而且可以使用几乎全部方法和变量.

例子1:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"  fontSize="12">
<mx:Script>
  <![CDATA[
   import flash.net.SharedObject;
   import mx.controls.Alert;
  
     /定义一个SharedObject对象
     public var so:SharedObject;
     public function login():void{
      //连接本地共享对象,如果没有则创建一个
      so=SharedObject.getLocal("cookie");
      //设置共享对象的属性值
   so.data.username = txtUsername.text;
      so.data.pwd = txtPassword.text;
      //把共享对象数据写入本地文件
      so.flush();
     }
    
     function init():void{
      //连接本地共享对象
      so=SharedObject.getLocal("cookie");
      //如果没有共享对象,则还没有登录
         if(so.size==0)
      {
       Alert.show("你还未登录");
      }else{ //否则将值赋给文本框
       txtUsername.text = so.data.username;
        txtPassword.text = so.data.pwd;
      }
     }
    
     //获得共享对象的值
      public function getLogin():void{
       txtUsername.text = so.data.username;
       txtPassword.text = so.data.pwd;
      }
     
      //清除共享对象 
      public function clearLogin():void{
       txtUsername.text = "";
       txtPassword.text = "";
       so.clear();
      }
  ]]>    
</mx:Script>
 
 <mx:Panel width="318" height="210" layout="absolute" id="panel" x="340" y="81"  >
   <mx:Label x="36" y="29" text="用户名:" />
   <mx:Label x="24" y="60" text="密   码:"/>
   <mx:TextInput x="93" y="27" id="txtUsername"/>
   <mx:TextInput x="93" y="58" id="txtPassword" editable="true"/>
   <mx:Button x="18" y="106" label="登录" id="btnLogin" click="login()"  />
   <mx:Button x="93" y="106" label="获取信息" id="btnReset" click="getLogin()" />
   <mx:Button x="198" y="106" label="清除信息" id="btnClear" click="clearLogin()" />
  </mx:Panel>
</mx:Application>

 

例子2:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12"
  mouseDown="init();"  creationComplete="createUser();">
<mx:Script>
  <![CDATA[
   import mx.validators.PhoneNumberValidator;
   import flash.net.SharedObject;
   import mx.controls.Alert;
   
   public static var row:int;
   public var myTimer:Timer = new Timer(1000,3);
   public var so:SharedObject;
  
   [Bindable]
   public var valueName:String="undefined";
   [Bindable]
   public var valuePwd:String="undefined";
  
   public function createUser():void
   {
     so=SharedObject.getLocal("cookie");
     if(so.size==0)
     {
       trace("你还未登录");
     }
   }
  
   public function log():void
   {
   
     so.data.username="宋秋平";
     so.data.pwd="123";
     so.flush();
     valueName=so.data.username;
   }
  
    function init():void
    {
     
      myTimer.reset();
      myTimer.start();
      myTimer.addEventListener("timer", timerHandler);
      trace("登录状态");
   }
  
    public function timerHandler(event:TimerEvent):void
    {
      trace(myTimer.currentCount);
      if(myTimer.currentCount==3)
      {
        trace("3秒钟你未进行认何操作,cookie销毁,取消登录");
        so.clear();
        trace(so.data.username);
        valueName=so.data.username;
        trace(valueName);
      }  
    
    }
  
  ]]>    
</mx:Script>

  <mx:Button label="登录" click="log()" x="90" y="226"/>
  <mx:Label x="10" y="138"  width="257" text="{valueName}" height="58" fontSize="12"/>

</mx:Application>

 

部分内容转载自网络:地址忘了,抱歉!

你可能感兴趣的:(function,Flash,application,存储,import,actionscript)