java - FREObject.callMethod 与 FREArray 作为参数错误

标签 java actionscript-3 air-native-extension

我在 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/

相关文章:

java - 有条件的自动化网络交互

flash - 没有重复的AS3递归对象扫描?

android - 如何在 Adob​​e Air Mobile 的 Android native 扩展中包含额外的 Jar

ios - 移动增强现实

java - 在 Wicket 中,为什么我的结果在提交表单后没有刷新?

java - RestEasy 服务对浏览器请求和 Java 客户端请求返回不同的响应

java打印接口(interface)的数组列表

flash - 为什么AS3默认不使用弱引用? (在事件监听器中)

java - 用作接口(interface)替代的内部类示例

ios - Adobe AIR for IOS 中的 native 扩展代码是否在单独的 CPU 线程中运行?