FREFunction

パッケージ:
com.adobe.fre

ランタイムバージョン
AIR 3

FREFunction インターフェイスには、ネイティブ拡張内に定義された Java 関数をランタイムが呼び出すときに使用するインターフェイスが定義されています。

メソッド

メソッド

説明

FREObject call( FREContext ctx, FREObject[] args )

拡張の ActionScript 側からこの関数が呼び出されたときに、AIR ランタイムによって呼び出されます。

FREFunction インターフェイスは、拡張内にある Java 関数のうち、ネイティブ拡張ライブラリの ActionScript 側から呼び出せるものすべてに実装します。この機能を提供する FREContext インスタンスの getFunctions() から返される Java Map オブジェクトに、このクラスを追加します。

ActionScript 側にある ExtensionContext インスタンスの call() メソッドが実行されると、ランタイムによって call() メソッドが呼び出されます。

FREFunction をコンテキストの関数マップに追加するときには、文字列値をキーとして指定します。関数を ActionScript から呼び出すときは、それと同じ値を指定します。

メソッドの詳細

call

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 側で共有されるオブジェクトは、すべて、1 個の FREObject または FREObject サブクラス内にカプセル化されます。

クラスの例

次に示す例は、1 個の文字列引数を取り、その中の文字を逆に並べた新しい文字列を返す関数です。 call() 関数では、関数呼び出しが行われたコンテキストから ID 文字列を取得するために 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(); 
    }   
}