Android onDeviceReady函数中的Phonegap

时间:2011-11-24 10:14:30

标签: javascript android cordova

我在android开发中使用phonegap。我写了PoC,但我无法弄清楚为什么它不会改变profile变量的纬度。实际上

alert(profile.latitude);

之前运行
geoCode.setLocation();

这是我的代码;

document.addEventListener("deviceready", onDeviceReady, false);

var profile = {
    name: "",
    id: "red",
    latitude: "xx",
    longtitude: "",
    setCoordinates: function (latit, longt) {
        this.latitude = latit;
        this.longtitude = longt;
    }
};

var geoCode = {
    onSuccess: function (position) {
        profile.latitude = position.coords.latitude;
    },

    onError: function (error) {
    },

    setLocation : function () {
        navigator.geolocation.getCurrentPosition(this.onSuccess, this.onError);
    }
};

// Wait for PhoneGap to load
//

function onDeviceReady() {

    geoCode.setLocation();
    //alert("2");
    alert(profile.latitude);
};

提前致谢

2 个答案:

答案 0 :(得分:1)

navigator.geolocation.getCurrentPosition是一个异步函数。您需要执行以下操作:

var geoCode = {


setLocation : function (callback) {

    onSuccess: function (position) {
       callback(position.coords.latitude);
    },

    onError: function (error) {
    },
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}

};

// Wait for PhoneGap to load
//

function onDeviceReady() {

    geoCode.setLocation(function(latitude) {
        alert(latitude);
    });
};

答案 1 :(得分:0)

很简单,因为对navigator.geolocation.getCurrentPosition()的调用是异步调用。从而继续执行程序,您将看到警报。在显示警报后的某个时间,调用geoCode类的onSuccess调用,更新profile.latitude值。