FREFunction

包:
com.adobe.fre

运行时版本
AIR 3

FREFunction 接口定义运行时使用的用于调用本机扩展中定义的 Java 函数的接口。

方法

方法

说明

FREObject call( FREContext ctx, FREObject[] args )

当扩展的 ActionScript 端调用此函数时,由 AIR 运行时调用。

为扩展中的可以由本机扩展库的 ActionScript 部分调用的每个 Java 函数实现 FREFunction 接口。将类添加到由 FREContext 实例的提供函数的 getFunctions() 方法返回的 Java Map 对象。

当执行 ActionScript 部分中的 ExtensionContext 实例的 call() 方法时,运行时调用 call() 方法。

将 FREFunction 添加到上下文的函数映射中时,要指定一个字符串值作为密钥。当从 ActionScript 调用该函数时,使用同一值。

方法详细信息

调用

FREObject call( FREContext ctx, FREObject[] args )

当从 ActionScript 调用此函数时,由运行时调用。实现或启动由 call() 方法中的 FREFunction 实例提供的功能。

参数:

ctx
表示此扩展上下文的 FREContext 变量。

使用 ctx 参数可执行以下操作:

  • 获取和设置与扩展上下文关联的数据。

  • 使用 FREContext dispatchStatusEventAsync() 方法将异步事件调度到 ActionScript 端的 ExtensionContext 实例。

args
作为 FREObject 变量的数组传递到函数的参数。数组中的对象是用于调用 java 函数的 ActionScript ExtensionContext call() 方法中的参数。

返回:

FREObject
结果。在扩展的 Java 和 ActionScript 部分间共享的所有对象均封装在一个 FREObject 或其中一个子类中。

类示例

以下实例演示一个函数获取字符串参数并返回一个带有反转字符的新字符串。 call() 函数使用 ctx 参数从通过其调用函数的上下文中获取一个标识符字符串。

package com.example; 
 
import com.adobe.fre.FREContext; 
import com.adobe.fre.FREFunction; 
import com.adobe.fre.FREInvalidObjectException; 
import com.adobe.fre.FREObject; 
import com.adobe.fre.FRETypeMismatchException; 
import com.adobe.fre.FREWrongThreadException; 
import android.util.Log; 
 
public class ReverseStringFunction implements FREFunction { 
    public static final String NAME = "reverseString"; 
    private String tag; 
 
    public FREObject call(FREContext arg0, FREObject[] arg1) { 
        DataExchangeContext ctx = (DataExchangeContext) arg0; 
        tag = ctx.getIdentifier() + "." + NAME; 
        Log.i( tag, "Invoked " + NAME ); 
        FREObject returnValue = null; 
 
        try { 
            String value = arg1[0].getAsString(); 
            value = reverse( value ); 
            returnValue = FREObject.newObject( value );//Invert the received value 
 
        } catch (IllegalStateException e) { 
            Log.d(tag, e.getMessage()); 
            e.printStackTrace(); 
        } catch (FRETypeMismatchException e) { 
            Log.d(tag, e.getMessage()); 
            e.printStackTrace(); 
        } catch (FREInvalidObjectException e) { 
            Log.d(tag, e.getMessage()); 
            e.printStackTrace(); 
        } catch (FREWrongThreadException e) { 
            Log.d(tag, e.getMessage()); 
            e.printStackTrace(); 
        } 
 
        return returnValue; 
    } 
 
    private String reverse( String source ) { 
        int i, len = source.length(); 
        StringBuffer dest = new StringBuffer(len); 
        for (i = (len - 1); i >= 0; i--) 
            dest.append(source.charAt(i)); 
            return dest.toString(); 
    }   
}