Возврат FREArray из Java во Flash

У меня есть собственная функция Android, которую я вызываю во Flash с помощью ANE:

public class GetProductsFunction implements FREFunction {
    private static final String TAG = "GetProducts";

    @Override
    public FREObject call(FREContext context, FREObject[] args) {
        FREArray freArray = IAPManager.getInstance().getFREProducts();

        return freArray;
    }
}

На стороне флэш-памяти я вызываю функцию так:

var object:Object = this.extContext.call("GetProductsFunction");

Я не совсем уверен, как добраться до моего FREArray, который я вернул. Функция во Flash возвращает объект ActionScript, но вы, очевидно, не можете получить массив из объекта.

Итак, как вы читаете эти данные?


person Josh Elias    schedule 23.07.2013    source источник
comment
Если вы работаете с AIR, FREArray — это собственный объект. См. справочник Adobe FREArray (help.adobe.com/en_US/air/extensions). /) для реализации. Во-вторых, вы выполняете неявное приведение вашего FREArray к объекту (от которого наследуется почти все). Сначала введите возвращаемую переменную как FREArray, и значение не будет принудительно задано.   -  person Atriace    schedule 24.07.2013


Ответы (2)


Сторона Java:

public class testFunction implements FREFunction {
    public FREByteArray call(FREContext context, FREObject[] passedArgs) {    
        FREByteArray freByteArray = null;
        try {
            byte[] rdata = ...the bytes you have...;
            int packetLenght = 8;

            //Prepare an ActionScript ByteArray
            freByteArray = FREByteArray.newByteArray();
            freByteArray.setProperty("length", FREObject.newObject(packetLenght));
            freByteArray.acquire();
            ByteBuffer bytes = freByteArray.getBytes();

            //Fill it
            if(rdata != null)
                bytes.put(rdata, 0, packetLenght );

            freByteArray.release();
        } catch (Exception ex) {
            Log.e("MYANE", "testFunction Exception " + ex.getMessage());
        }

        return freByteArray;
    }
}

Сторона ActionScript:

var rdata:ByteArray = new ByteArray();
var received:Object = extContext.call('test') as ByteArray;
if (received is ByteArray)
{
    //Read bytes in rdata
    received.readBytes(rdata);
}
person Jérôme Gillard    schedule 05.08.2013

FREObject stringElement = FREObject.newObject("String element value"); 
FREArray asVector = FREArray.newArray( "String", 1, false ); 
asVector.setObjectAt( 0, stringElement );

Дополнительная информация http://help.adobe.com/en_US/air/extensions/WS982b6f491d178e6d6565d9b1132a79a012f-7ff8.html

person Igor    schedule 07.07.2014