我想将加速度的值从js传递给java。谁能告诉我哪里出错了?
这是我的代码:
public class Accelerometer extends JavaScriptObject {
protected Accelerometer(){};
public static native double getCurrentAccelerationX() /*-{
var x = 0.0;
$wnd.ondevicemotion = function(event){
//$wnd.alert(event.accelerationIncludingGravity.x);
x = event.accelerationIncludingGravity.y;
};
return x;
}-*/;
}
答案 0 :(得分:0)
好的,所以你所拥有的东西不会起作用,因为你的函数会立即返回,但实际值直到稍后才可用。
您需要让JSNI函数在更改时调用类中的方法。
(另外:如果您发布的是您的Accelerometer类的范围,则无需延长JavaScriptObject
。)
尝试这样的事情:
package foo.bar;
public class Accelerometer {
public void currentAcceleration(double x, double y) {
Window.alert("currentAcceleration: " + x + ", " + y);
}
public static native void getCurrentAcceleration(Accelerometer p) /*-{
$wnd.ondevicemotion = function(event) {
var acc = event.accelerationIncludingGravity;
$entry( p.@foo.bar.Accelerometer::currentAcceleration(DD)(acc.x, acc.y) );
};
}-*/;
}
您可以将此方法作为Accelerometer的成员而不是静态,但我更喜欢将实例作为参数传递给函数,以避免与this
混淆。