Flex项目中需要用到当用户登录成功后记录用户名方便下次登录,下面是简单Demo:
<?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/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
/**
*SharedObject参考《Actionscript3.0 CookBook》第十七章 数据持久性
*/
import mx.collections.ArrayCollection;
private var FUsersDataShareObj:SharedObject = SharedObject.getLocal("UsersData");
/**记录本地保存的用户名 */
public var allUsers:ArrayCollection=new ArrayCollection();
/**
* 保存用户名到本地
* */
protected function saveUserName():void{
/**选择不保存用户名*/
if(svName.selected==false)
return;
var aUserName:String=userTI.text;
var mUsersDataArr:Array=new Array();
if(FUsersDataShareObj.data.Users!=null)
mUsersDataArr=FUsersDataShareObj.data.Users as Array;
/**保存未记录的用户名*/
if(mUsersDataArr.indexOf(aUserName)<0)
mUsersDataArr.push(aUserName);
/**保存*/
FUsersDataShareObj.data.Users=mUsersDataArr;
FUsersDataShareObj.flush();
}
/**
* 获取所有保存的用户名
* */
protected function getUserName():void{
var mUsersArr:Array=new Array();
mUsersArr=FUsersDataShareObj.data.Users as Array;
if(mUsersArr==null || mUsersArr.length==0){
return;
}
if(allUsers !=null || allUsers.length>0){
allUsers.removeAll();
}
for(var i:int=0;i<mUsersArr.length;i++){
allUsers.addItem(mUsersArr[i]);
}
}
/**
* 显示list,根据输入过滤数据
* */
private function showList():void{
/**保持数据源绑定的数据*/
var dataArray:ArrayCollection = new ArrayCollection();
if(dataArray.source.length == 0){
dataArray = allUsers ;
}
/**如果数据源为空则返回*/
if(dataArray==null || dataArray.source.length == 0){
return;
}
/**获取查询的数据*/
var empDataProvider:ArrayCollection = new ArrayCollection();
var i:int=0;
for(i= 0;i< dataArray.length;i++){
if((dataArray[i] is String) && (dataArray[i]!=null) && (dataArray[i].indexOf(userTI.text) != -1))
{
/**首先保证dataArray[i]是字符串且不为空*/
empDataProvider.addItem(dataArray[i]);
}
}
userList.dataProvider=empDataProvider;
if (empDataProvider.length>0){
if(empDataProvider.length<=5){
userList.rowCount=empDataProvider.length;
}else{
userList.rowCount=5;
}
userList.visible=true;
}else{
userList.visible=false;
}
}
/**
* 焦点转移,隐藏List
* */
protected function hideList():void{
if(userList.visible==false){
return;
}
/**焦点转移到userList,用于选择用户名时*/
if(this.stage.focus==userList){
}else{/**焦点转移到其他*/
userList.visible=false;
}
}
/**
* 清除本地所有保存的用户名
* */
protected function clearUserName():void{
FUsersDataShareObj.clear();
}
/**
* 选择已经保存的用户名
* */
protected function selectUserName():void{
userTI.text=userList.selectedItem.toString();
userList.visible=false;
}
]]>
</fx:Script>
<s:Panel x="19" y="19" width="409" height="270" title="登录Demo" click="hideList()">
<s:Button x="190" y="45.5" label="登录" click="saveUserName()"/>
<s:TextInput x="54" y="45" id="passwordTI"/>
<s:TextInput x="54" y="15" id="userTI" change="showList()" doubleClick="showList()" focusOut="hideList()" focusIn="getUserName()"/>
<mx:List x="54" y="{userTI.y+userTI.height}" width="128" id="userList" visible="false" click="selectUserName()"/>
<s:Button x="272" y="46" label="清除缓存" click="clearUserName()"/>
<s:CheckBox x="190" y="17" label="记住用户名" id="svName" selected="true"/>
<s:Label x="9" y="20" text="用户名"/>
<s:Label x="21" y="50" text="密码"/>
</s:Panel>
</s:Application>