0

我正在为 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如果声明为longor ,我会收到类似的错误double。但是,类似的 iOS API 可以正常工作。

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

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

4

3 回答 3

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

您还可以编写自动化或交互式测试来测试您的 API 方法。

于 2014-07-23T19:24:45.500 回答
1

当您的函数正在寻找一个 int 时,它看起来像是将 5 作为字符串发送。如果触发器仅将其作为字符串发送,您可能希望将 int 更改为 string 并在事后将字符串转换为 int . 不是最好的解决方案,但我认为如果 trigger.io 没有让您选择以 int 形式发送内容,这将起作用

于 2014-07-17T16:19:27.333 回答
0

现在,我已经定义了一个foo5调用foo.

public static void foo5(final ForgeTask task) {
    API.foo(task, 5);
}
于 2014-06-29T01:44:10.143 回答