Flex记录用户名SharedObject
Flex项目中需要用到当用户登录成功后记录用户名方便下次登录,下面是简单Demo:
1 <?xml version="1.0" encoding="utf-8"?> 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 3 xmlns:s="library://ns.adobe.com/flex/spark" 4 xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 5 <fx:Declarations> 6 <!-- 将非可视元素(例如服务、值对象)放在此处 --> 7 </fx:Declarations> 8 <fx:Script> 9 <![CDATA[ 10 /** 11 *SharedObject参考《Actionscript3.0 CookBook》第十七章 数据持久性 12 */ 13 import mx.collections.ArrayCollection; 14 15 private var FUsersDataShareObj:SharedObject = SharedObject.getLocal("UsersData"); 16 17 /**记录本地保存的用户名 */ 18 public var allUsers:ArrayCollection=new ArrayCollection(); 19 20 /** 21 * 保存用户名到本地 22 * */ 23 protected function saveUserName():void{ 24 /**选择不保存用户名*/ 25 if(svName.selected==false) 26 return; 27 28 var aUserName:String=userTI.text; 29 30 var mUsersDataArr:Array=new Array(); 31 32 if(FUsersDataShareObj.data.Users!=null) 33 mUsersDataArr=FUsersDataShareObj.data.Users as Array; 34 35 /**保存未记录的用户名*/ 36 if(mUsersDataArr.indexOf(aUserName)<0) 37 mUsersDataArr.push(aUserName); 38 39 /**保存*/ 40 FUsersDataShareObj.data.Users=mUsersDataArr; 41 FUsersDataShareObj.flush(); 42 } 43 44 /** 45 * 获取所有保存的用户名 46 * */ 47 protected function getUserName():void{ 48 var mUsersArr:Array=new Array(); 49 mUsersArr=FUsersDataShareObj.data.Users as Array; 50 if(mUsersArr==null || mUsersArr.length==0){ 51 return; 52 } 53 if(allUsers !=null || allUsers.length>0){ 54 allUsers.removeAll(); 55 } 56 57 for(var i:int=0;i<mUsersArr.length;i++){ 58 allUsers.addItem(mUsersArr[i]); 59 } 60 } 61 62 /** 63 * 显示list,根据输入过滤数据 64 * */ 65 private function showList():void{ 66 /**保持数据源绑定的数据*/ 67 var dataArray:ArrayCollection = new ArrayCollection(); 68 69 if(dataArray.source.length == 0){ 70 dataArray = allUsers ; 71 } 72 /**如果数据源为空则返回*/ 73 if(dataArray==null || dataArray.source.length == 0){ 74 return; 75 } 76 /**获取查询的数据*/ 77 var empDataProvider:ArrayCollection = new ArrayCollection(); 78 var i:int=0; 79 80 for(i= 0;i< dataArray.length;i++){ 81 if((dataArray[i] is String) && (dataArray[i]!=null) && (dataArray[i].indexOf(userTI.text) != -1)) 82 { 83 /**首先保证dataArray[i]是字符串且不为空*/ 84 empDataProvider.addItem(dataArray[i]); 85 } 86 } 87 userList.dataProvider=empDataProvider; 88 89 if (empDataProvider.length>0){ 90 if(empDataProvider.length<=5){ 91 userList.rowCount=empDataProvider.length; 92 }else{ 93 userList.rowCount=5; 94 } 95 userList.visible=true; 96 }else{ 97 userList.visible=false; 98 } 99 } 100 101 /** 102 * 焦点转移,隐藏List 103 * */ 104 protected function hideList():void{ 105 if(userList.visible==false){ 106 return; 107 } 108 109 /**焦点转移到userList,用于选择用户名时*/ 110 if(this.stage.focus==userList){ 111 112 }else{/**焦点转移到其他*/ 113 userList.visible=false; 114 } 115 } 116 117 /** 118 * 清除本地所有保存的用户名 119 * */ 120 protected function clearUserName():void{ 121 FUsersDataShareObj.clear(); 122 } 123 /** 124 * 选择已经保存的用户名 125 * */ 126 protected function selectUserName():void{ 127 userTI.text=userList.selectedItem.toString(); 128 userList.visible=false; 129 } 130 131 ]]> 132 </fx:Script> 133 134 <s:Panel x="19" y="19" width="409" height="270" title="登录Demo" click="hideList()"> 135 <s:Button x="190" y="45.5" label="登录" click="saveUserName()"/> 136 <s:TextInput x="54" y="45" id="passwordTI"/> 137 <s:TextInput x="54" y="15" id="userTI" change="showList()" doubleClick="showList()" focusOut="hideList()" focusIn="getUserName()"/> 138 <mx:List x="54" y="{userTI.y+userTI.height}" width="128" id="userList" visible="false" click="selectUserName()"/> 139 <s:Button x="272" y="46" label="清除缓存" click="clearUserName()"/> 140 <s:CheckBox x="190" y="17" label="记住用户名" id="svName" selected="true"/> 141 <s:Label x="9" y="20" text="用户名"/> 142 <s:Label x="21" y="50" text="密码"/> 143 </s:Panel> 144 </s:Application>