2013-07-23 4 views
0

У меня есть родной андроид функция, что я звоню в Flash, используя ANE:Возвращения FREArray из Java в Flash,

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, но вы, очевидно, не можете получить массив из объекта.

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

+0

Если вы работаете с AIR, FREArray является родным объектом. См. Справочник FREArray Adobe (http://help.adobe.com/en_US/air/extensions/WS982b6f491d178e6d6565d9b1132a79a012f-7ff8.html) для реализации. Во-вторых, вы делаете неявное принуждение вашего FREArray к объекту (который больше всего наследует). Введите тип возвращаемой переменной как FREArray, и значение не будет принудительно выполнено. – Atriace

ответ

1

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); 
} 
+0

У меня есть байты? –