1

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

}

4

1 回答 1

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.

于 2012-08-14T14:28:08.537 回答