如何使用int参数测试Trigger.io Android原生模块API?

时间:2014-06-29 01:44:10

标签: parameters trigger.io native-methods

我正在为Trigger.io编写原生Android模块。此方法在API.java中定义。

public static void foo(final ForgeTask task, @ForgeParam("bar") final int bar) {
    System.out.println("foo called "+task.params);
    task.success();
}

当我运行检查器并在5的文本框中输入bar时,我看到以下输出。

  

Called "test_test.foo" with "{"bar":"5"}"

     

Error for "test_test.foo" with "{"message":"Parameter 'bar' was of the wrong type, expected an int","type":"UNEXPECTED_FAILURE","subtype":null}"

如果bar被声明为longdouble,我会收到类似的错误。但是,类似的iOS API工作正常。

如何在Android检查器中测试此方法?

编辑:我使用Trigger平台v2.1.7(撰写本文时最新)。

3 个答案:

答案 0 :(得分:1)

当你的函数正在寻找一个int时,看起来像是将它作为一个字符串发送。如果触发器只是将它作为字符串发送,你可能想要将int更改为string并将字符串转换为int事后。不是最好的解决方案,但我认为如果trigger.io没有给你选择以int形式发送东西,那将会有效

答案 1 :(得分:1)

这是因为html文本输入包含一个字符串,并且该字符串永远不会被解析为int。

选项1

您可以修复 ForgeInspector / assets / src / js / inspector.js 。变化:

$('#_run').click(function () {
    var module = $('#_module').val();
    var method = $('#_method').val();
    var params = {};

    $('.api_input input').each(function (i, x) {
        params[$(x).attr('id')] = $(x).val();
    });

    $('#_output').prepend('<pre class="alert alert-info">Called "'+module+'.'+method+'" with "'+JSON.stringify(params, null, '')+'"</pre>');
    forge.internal.call(module+'.'+method, params, function () {
        $('#_output').prepend('<pre class="alert alert-success">Success for "'+module+'.'+method+'" with "'+JSON.stringify(arguments[0], null, '')+'"</pre>');
    }, function () {
        $('#_output').prepend('<pre class="alert alert-error">Error for "'+module+'.'+method+'" with "'+JSON.stringify(arguments[0], null, '')+'"</pre>');
    })
});

$('#_run').click(function () {
    var module = $('#_module').val();
    var method = $('#_method').val();
    var paramTypes = modules[module][method];
    var params = {};

    $('.api_input input').each(function (i, x) {
        switch (paramTypes[$(x).attr('id')].type) {
            case 'int': params[$(x).attr('id')] = parseInt($(x).val()); break;
            case 'long': params[$(x).attr('id')] = parseInt($(x).val()); break;
            case 'double': params[$(x).attr('id')] = parseFloat($(x).val()); break;
            default: params[$(x).attr('id')] = $(x).val();
        }
    });

    $('#_output').prepend('<pre class="alert alert-info">Called "'+module+'.'+method+'" with "'+JSON.stringify(params, null, '')+'"</pre>');
    forge.internal.call(module+'.'+method, params, function () {
        $('#_output').prepend('<pre class="alert alert-success">Success for "'+module+'.'+method+'" with "'+JSON.stringify(arguments[0], null, '')+'"</pre>');
    }, function () {
        $('#_output').prepend('<pre class="alert alert-error">Error for "'+module+'.'+method+'" with "'+JSON.stringify(arguments[0], null, '')+'"</pre>');
    })
});

这会将值转换为正确的类型。

选项2

您还可以编写automated or interactive test来测试您的API方法。

答案 2 :(得分:0)

目前,我已经定义了一个无参数的方法foo5来调用foo

public static void foo5(final ForgeTask task) {
    API.foo(task, 5);
}