我正在为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
被声明为long
或double
,我会收到类似的错误。但是,类似的iOS API工作正常。
如何在Android检查器中测试此方法?
编辑:我使用Trigger平台v2.1.7(撰写本文时最新)。
答案 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);
}