Adobe AIR

httpservice request传参数的几种方式

mxml代码中 httpservice 组件,连接一php计算器

<s:Button click="this.hs.send();"/>
<fx:Declarations>
	<s:HTTPService id="hs" url="http://127.0.0.1/cal.php" method="GET">
		<s:request xmlns="">
			<calculator>plus</calculator>
			<param1>10</param1>
			<param2>23</param2>
		</s:request>
		<s:fault>
			<![CDATA[
				trace("")
			]]>
		</s:fault>
		<s:result>
			<![CDATA[
				trace(event.result.result.equals)
			]]>
		</s:result>
	</s:HTTPService>
</fx:Declarations>

httpService组件,在as块中传入参数

var param:Object = {calculator:"minus",param1:"23",param2:"13"}
httpServ.send(param)

<mx:HTTPService id="httpServ">
	<mx:resultFormat>text</mx:resultFormat>
	<mx:url>http://127.0.0.1/cal.php</mx:url>
	<mx:fault>Alert.show(event.toString(), event.type);</mx:fault>
</mx:HTTPService>

as代码中,使用httpservice类

public var httpservice:mx.rpc.http.HTTPService = new mx.rpc.http.HTTPService();
public var param:Object={calculator:"minus",param1:"23",param2:"13"};
public function send_data():void{
	httpservice.url ="http://127.0.0.1/cal.php";
	httpservice.method = "POST";
	httpservice.addEventListener(ResultEvent.RESULT, resultHandler);
	httpservice.addEventListener(FaultEvent.FAULT, this.HttpErrorHandle);
	httpservice.send(param);
		}

as代码中使用urlloader

public function Temp()
		{
			var url:String = "http://127.0.0.1/cal.php"
			var urlVariables:URLVariables = new URLVariables();
			urlVariables.decode("calculator=plus&param1=10&param2=22");
			var request:URLRequest = new URLRequest(url);
			request.data = urlVariables;
			request.method = URLRequestMethod.POST

			var loader:URLLoader = new URLLoader()
			loader.dataFormat = URLLoaderDataFormat.TEXT
			loader.addEventListener(Event.COMPLETE, onComplete)
			loader.load(request);

		}
		public function onlistener(event:Event):void{
			var xml:XML = new XML(event.target.data)

			trace(xml..equals)
		}

AS3中使用Twitter API

自制app使用Twitter API

1.1   准备工作

A.注册Twitter用户

B. 下载库文件http://dev.twitter.com/pages/libraries

本实例使用ActionScript 库文件 TwitterScript http://code.google.com/p/twitterscript/

C. Twitter官方文档 http://dev.twitter.com/doc TwitterScript并无说明文档,Twitter官方的文档和TwitterScript的代码不一致,但不矛盾。

1.2 需求说明

制作AIR程序(图1),实现如下功能

a.  显示当前用户头像,用户名

b.  显示当前用户following   followers

c.  显示当前用户friends Tweet  public Tweet

d.  提交新Tweet,并体现到friends Tweet中

图1 程序界面

1.3编写代码

Twitter数据调用多数需要身份验证,有的是不需要的。

Twitter的身份验证简单,只需将用户名和密码编码后嵌入到实际调用数据的request的requestHeaders中即可(暂不考虑OAuth),不同于facebook须登录后得到session-key才能调用数据。

TwitterScript 中的方法:

类Twitter.as中function setAuthenticationCredentials(“username”,”password”)

此方法只是将用户的名和密码编码,function twitterRequest()负责将编码嵌入到requestHeaders,该嵌入过程被整合到各个具体调用数据的方法中因此编写程序代码时不用考虑此过程

A.制作登录页面,通过TextInput将用户名密码传给程序。(图2)

图2

提示:两个state ,登录界面和程序界面两个界面大小可以不同:代码如

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
					   xmlns:s="library://ns.adobe.com/flex/spark"
					   xmlns:mx="library://ns.adobe.com/flex/mx" width="800" height="500"
					   currentState="sign_out" width.sign_out="320" height.sign_out="230"
					   width.sign_in="628" height.sign_in="500">

Sign in按钮click=“sign_in( )”

B. 定义sign_in方法,调用数据

var twitter:Twitter = new Twitter()

twitte.setAuthenticationCredentials(usrId.text, passwd.text)

对用户名 密码编码, userId 和 passwd是登录页面两个输入框的ID

twitter.loadInfo(userId.text)

twitter.addEventListener(TwitterEvent.ON_SHOW_INFO, onloadInfo)

调用user信息

twitter.loadFriends(usrId.text)

twitter.addEventListener(TwitterEvent.ON_FRIENDS_RESULT, onloadfriends)

调用user following

twitter.loadFriendsTimeline(userID.text)

twitter.addEventListener(TwitterEvent.ON_FRIENDS_TIMELINE_RESULT, onloadUserTimeLine)

调用friends Tweet

twitter.addEventListener(TwitterEvent.ON_ERROR, onerror)

监听error

C. 处理返回结果。制作程序界面(如图3)

图3

a.显示用户名 头像

loadInfo方法返回的data类型为TwitterUser,包含name ,square url等,处理方法略

b.显示following用户名

loadFriends方法返回TwitterUser的Array

var tmp:Array = event.data as Array

for (var i:int; i<tmp.length; i++){

var user:TwitterUser = tmp[i];

followname.addItem({flwname:user.name})

followname:ArrayCollection 绑定为显示following 的List的数据源,List标签中建itemrenderer 代码如

<fx:Script>
		<![CDATA[

			[Bindable]
			public var displayname:String;
			override public function set data(value:Object):void{

				displayname = new String(value.flwname)

			}
		]]>
	</fx:Script>
	<s:VGroup>
			<s:Label text="{displayname}"/>
	</s:VGroup>

提示:也可显示头像、创建时间、时区等等

c.显示user ‘s friends Tweet   public Tweet

loadFriendsTimeline方法返回Tweet的Array包含text 和发布者信息等

var tmp:Array = event.data as Array;

for(var i:int;i<event.data.length;i++){ tweetArray.addItem(tmp[i])}

tweetArray:ArrayCollection绑定为显示tweet的DataGrid的数据源,DataGrid代码

<mx:DataGrid x="10" y="87" width="607" height="327" dataProvider="{tweetArray}">
			<mx:columns>
				<mx:DataGridColumn headerText="Tweet" dataField="text"/>
				<mx:DataGridColumn headerText="Tweeter" dataField="user.name" width="100"/>
			</mx:columns>
		</mx:DataGrid>

d.  提交新Tweet。添加输入框和提交按钮,按钮事件sendTweet()

public function sendTweet():void{

var Tweet:String = tweet.text

将输入内容赋值给变量Tweet

twitter.setStatus(Tweet);

提交Tweet

twitter.addEventListener(TwitterEvent.ON_SET_STATUS, onsetstatus)

监听是否成功

tweet.text = “”} 将输入框中文本清除

提交成功后onsetstatus方法刷新一下DataGrid的数据 定义刷新方法

function freshTweet()本例将loadFriendsTimeline方法提出另定义为LoadFriendsTimeLine方法,function freshTweet()执行LoadFriendsTimeLine方法。

e.  添加刷新按钮  添加button 定义skinClass=“com.skin.freshButton”按钮图存同一路径 freshButton 代码

<s:states>
		<s:State name="disabled" />
		<s:State name="down" />
		<s:State name="over" />
		<s:State name="up" />
	</s:states>
	<s:BitmapImage source="@Embed('arrow_refresh.png')"/>

按钮 buttonmode=“true”click=“freshTweet()”

f.   添加Alert.Show 。之前监听Error的响应方法 编写代码

var alert:Alert = Alert.show(“something was wrong,click button for try again”)

登录页面 检验是否输入用户名密码

if(userId.text==”"||passwd.text==”"){ Alert.show(“please enter your username and password!”)}

2 Twitter官网工具

API Status    查看各API状态

http://dev.twitter.com/status

API Console     Web Console

http://dev.twitter.com/start

Bug:Flex自动帧频1000!

用Flex4才发现了这个问题,

当用spark添加一个mx组件时不会有问题,但当这个mx组件中还有其他组件

例如<mx:HBox><mx:Canvas/></mx:HBox>

stage.frameRate会瞬间达到1000!

之后会自动恢复到默认的帧频(如果不手动设定,会是24)

这时不用担心什么问题,

但如果frameRate达到1000的这段时间中,添加了一个EnterFrame事件,

并且在EnterFrame的响应函数中,调整某个组件的位置,

frameRate就不会恢复回24,而是一直持续1000,知道取消了EnterFrame为止

源文件:
src
源码如下:
Application.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/mx" minWidth="955" minHeight="600" frameRate="12"
			 backgroundColor="0xFF00FF">
	<fx:Script>
		<![CDATA[

			import components.MyComponent;

			import mx.containers.HBox;
			import mx.core.UIComponent;
			import mx.events.FlexEvent;

			protected function button2_clickHandler(event:MouseEvent):void
			{
				trace(this.stage.frameRate);
				this.txt.text = "Current FrameRate:"+this.stage.frameRate.toString();
			}

			protected var _box:UIComponent;
			protected function button3_clickHandler(event:MouseEvent):void
			{
				_box = new MyComponent();
				this.container2.removeAllElements();
				this.container2.addElement(_box);
				button2_clickHandler(null);
				button4_clickHandler(null);
			}

			protected function enterFrameHandler(event:Event):void
			{
				if(_box){
					container1.x+=0.2;
				}
			}
			protected function button4_clickHandler(event:MouseEvent):void
			{
//				this.moveEffect.play([this.container2]);
				this.addEventListener(Event.ENTER_FRAME,this.enterFrameHandler);
			}
			protected function button5_clickHandler(event:MouseEvent):void
			{
				this.removeEventListener(Event.ENTER_FRAME,this.enterFrameHandler);
			}

		]]>
	</fx:Script>

	<fx:Declarations>
		<s:Move id="moveEffect" duration="10000" xFrom="10" xTo="300" yFrom="10" yTo="300"/>
	</fx:Declarations>
	<mx:Canvas id="container1" y="60" width="100%" height="100%"/>
	<s:SkinnableContainer id="container2" x="20" y="80" width="900" height="600"/>

	<s:Group>
		<s:layout>
			<s:HorizontalLayout>
			</s:HorizontalLayout>
		</s:layout>
		<s:Button click="button2_clickHandler(event)" label="Trace frameRate"/>
		<s:Label text="" id="txt" width="100"/>
		<s:Button click="button3_clickHandler(event)" label="load MyComponent"/>
		<s:Button click="button4_clickHandler(event)" label="Start Move"/>
		<s:Button click="button5_clickHandler(event)" label="Stop Move"/>
	</s:Group>
</s:Application>

components/MyComponent.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009"
		 xmlns:s="library://ns.adobe.com/flex/spark"
		 xmlns:mx="library://ns.adobe.com/flex/mx"
		 >
	<mx:Canvas backgroundAlpha="1" width="30" height="30" backgroundColor="0x0000F0"/>
</mx:HBox>

Flash Builder4, Flex4, ColdFusion Builder今天正式发布

个人使用了一下Flash Builder以及Flex4,感觉的确是一个很大的改进。下面是adobe社区的发布信息

Dear community,

We are thrilled to announce that as of today (3/22) final GA releases of Flash Builder 4, the Flex 4 framework, and the new ColdFusion Builder are out. Each of you have played a key role in helping Adobe spread the details about the earlier beta releases and we are looking forward to working with you over the coming weeks to get the news out about the final releases. In the coming weeks, members of Adobe’s product and evangelist teams will be visiting many of your user groups to help your members further explore the many new features and what can be built with them.

Thank you SO much for all that you do to help us build and sustain the awesome community around these great products!

Sincerely,

Dave Gruber, Group Product Marketing Manager
Flash Platform Tools

Check out these online resources to learn more:

· Read Andrew Shorten’s FlexTeam blog post

· AdobeTV: Learn what developers like about Flash Builder in this video from Flash Camp Boston from March 19th

· AdobeTV: David Wadhwani, VP and GM of Adobe’s Platform BU introduces new Flash Platform products

· Test drive Flex 4 Check out the new Flex Test Drive: Build an application in an hour and learn about Flex 4 using this new guided, video tutorial

· Flex-in-a-week free video training new for Flex 4

· Get Flash Builder 4 (remember to uninstall any FB4 beta SW first)

· Get ColdFusion Builder

· Video: ColdFusion Builder Feature Tour

AIR读取CSV文件并进行保存

最近在帮一个朋友做一个程序,其中用到AIR读取Excel导出的CSV文件进行数据导入数据库的工作,中间碰到了一些问题,最后都可以一一解决,感觉挺有意思,特意拿来个大家分享一下。
Read More »