我在 native 扩展中从 Java 调用 ActionScript 方法时遇到问题。在构建实际数组、使用 FREObjects 填充它并使用我要调用的方法初始化 ActionScript 类时,我没有收到任何错误。但是当我实际调用该方法时,我收到了 FREASErrorException。
Java 代码:
try {
FREArray freArray = FREArray.newArray("com.industrycorp.extensions.product.IAPProduct", mProducts.size(), true);
for (int i = 0; i < mProducts.size(); i++) {
JavaProduct product = mProducts.get(i);
FREObject[] freArguments = new FREObject[6];
freArguments[0] = FREObject.newObject(product.getName());
freArguments[1] = FREObject.newObject(product.getPrice());
freArguments[2] = FREObject.newObject(product.getDescription());
freArguments[3] = FREObject.newObject(product.getType());
freArguments[4] = FREObject.newObject(product.getIsPurchased());
freArguments[5] = FREObject.newObject(product.getInventory());
FREObject freObject = FREObject.newObject("com.industrycorp.extensions.product.IAPProduct", freArguments);
freArray.setObjectAt(i, freObject);
}
FREObject resultHandler = FREObject.newObject("com.industrycorp.extensions.result.ResultHandler", null);
FREObject[] args = new FREObject[1];
args[0] = freArray;
resultHandler.callMethod("receivedProducts", args);
} catch (Exception e) {
mContext.dispatchStatusEventAsync("message", "Error converting Java Products to IAP Products: "+e.toString());
}
罪魁祸首是:resultHandler.callMethod("receivedProducts", args)。我不确定是什么问题。命名空间正确,方法名正确。
ActionScript 类:
package com.industrycorp.extensions.result {
import com.industrycorp.extensions.IAPController;
public class ResultHandler {
public function ResultHandler() {
}
public function receivedProducts(products:Array):void {
IAPController.getInstance().setProducts(products);
}
}
}
更新
只为那些好奇的人。这个对象工作正常。
ActionScript 代码
// Test FREObject Creation
FREObject testObject = FREObject.newObject("com.industrycorp.extensions.TestObject", null);
FREObject message = FREObject.newObject("FREObject wOrks");
FREObject[] testArgs = new FREObject[1];
testArgs[0] = message;
testObject.callMethod("PrintTest", testArgs);
Java 代码
package com.industrycorp.extensions {
public class TestObject {
public function TestObject() {
}
public function PrintTest(message:String):void {
trace(message);
}
}
}
所以这绝对是 FREArray/Array 作为参数的问题。
最佳答案
我不知道这是否行得通,因为我没有办法测试,但它对于评论来说太大了,所以如果它是错误的,请不要标记。
查看文档,您似乎正在创建一个 vector 数组,我认为您收到错误是因为操作脚本中的参数设置为数组。
尝试这样的事情
public function receivedProducts(products:Vector.<IAPProduct>):void {
IAPController.getInstance().setProducts(products);
}
[编辑]
我认为我看到的另一个问题是这行代码
FREObject[] freArguments = new FREObject[6];
文档说
public static FREObject newObject( int value )
Creates an FREObject containing a 32-bit signed integer value.
不应该吗
FREArray [] freArguments = new FREArray [6];
关于java - FREObject.callMethod 与 FREArray 作为参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132843/