在JavaScript中,所有的数字都是以双精度64位浮点数形式存储的,因此JavaScript中没有专门的整型或浮点类型区分。当你从H5(HTML/JavaScript)向Android原生代码传递数值时,通常情况下不需要特别指明该数值为double类型。
然而,当你通过JavaScript接口与Android原生代码交互时,可能会遇到类型转换问题。例如,如果JavaScript端传递的数字实际上是一个整数,并且Android端期望接收一个Double类型的对象,就有可能发生ClassCastException。
为了确保JavaScript端传递过来的数字被识别为Double类型,你可以确保传递前在JavaScript中使用的是带小数点的数值,即显式地声明为浮点数:
var startX = 123.0; // 显示声明为浮点数,即使它是一个整数
这样一来,即使值为123,添加.0也可以给Java层的原生代码一个暗示,表明这个值应该以Double类型处理,而不是Integer。
但如果在Android侧的处理仍然抛出了ClassCastException,建议在Android原生代码中更健壮地处理类型转换,例如:
Object value = ...; // 获取到从JS传递过来的值
Double doubleValue;
if (value instanceof Integer) {
// 如果是Integer,则先获取其intValue再转换为Double
doubleValue = ((Integer)value).doubleValue();
} else if (value instanceof Double) {
// 如果已经是Double,则直接使用
doubleValue = (Double) value;
} else {
// 其他情况:类型不匹配,可以抛出异常或者进行相应的错误处理
}
请注意,从Web视图传递的数据类型最终是由JSON序列化和反序列化确定的,如果你在使用如WebView的evaluateJavascript方法来执行JavaScript并获取结果,请确保你的JavaScript代码返回可适当转换的值类型。