如何在JSNI中将JS代码中的值传递给Java

时间:2012-08-13 03:46:58

标签: gwt jsni

我想将加速度的值从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;
}-*/;   

}

1 个答案:

答案 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混淆。