PhoneGap 1.5.0 Cordova-谷歌地理编码器在几次请求后无法工作(Android)

PhoneGap 1.5.0 Cordova-谷歌地理编码器在几次请求后无法工作(Android),cordova,cross-platform,Cordova,Cross Platform,我在Android上使用PhoneGap 1.5.0 Cordova, 我修改了PhoneGap Android官方测试/示例项目,并在两款不同的手机上进行了测试。 我发送谷歌地理编码请求,但经过几次迭代后,它就停止工作了。 同样的代码适用于PhoneGap 1.4.1 你能解释一下吗?你已经找到解决办法了吗 代码如下: Geocoder: function() { var serviceurl = 'http://maps.googleapis.com/maps/api/geocode

我在Android上使用PhoneGap 1.5.0 Cordova, 我修改了PhoneGap Android官方测试/示例项目,并在两款不同的手机上进行了测试。 我发送谷歌地理编码请求,但经过几次迭代后,它就停止工作了。 同样的代码适用于PhoneGap 1.4.1

你能解释一下吗?你已经找到解决办法了吗

代码如下:

Geocoder: function() {
    var serviceurl = 'http://maps.googleapis.com/maps/api/geocode/json', geocode, geocodeCoords, geocodeAddress;

    geocode = function(req, cb) {
        $.extend(req, {
            sensor : true,
            region : 'it',
            language : 'it'
        });
        var qs = $.param(req);
        $.ajax({
            type: 'GET',
            url : serviceurl,
            data : qs,
            success : function(d) {
                cb(d.results, d.status);
            },
            error : function(xhr, status, e) {
                alert('geocode error: ' + status);
                console.log(e);
                cb([], status || 'http error');
            }
        });
    };

    geocodeCoords = function(coords, cb) {
        var req = {
            latlng : [coords.latitude, coords.longitude].join(',')
        };
        geocode(req, function(arr, s) {
            cb(arr, s);
        });
    };

    geocodeAddress = function(addr, cb) {
        var req = {
            address : addr
        };
        geocode(req, function(arr, s) {
            cb(arr, s);
        });
    };

    /*
     * 1: obj.coords => { latitude: 0, longitude: 0 } 2: obj.address =>
     * string
     */
    this.geocode = function(obj, cb) {
        if (obj && obj.coords) {
            geocodeCoords(obj.coords, cb);
        } else if (obj && obj.address) {
            geocodeAddress(obj.address, cb);
        } else {
            throw new Error('geocoder failure: nothing to geocode');
        }
    };

    return this;
}

我可以确认这个行为,我还使用其他rest服务测试了这个东西,所以这个问题看起来与MapsAPI无关。 奇怪的是,phonegap/android日志中没有显示错误消息。 顺便说一句,我已经切换到1.4.1,1.5.0现在看起来对我来说不可用:(

编辑:我已经创建了一个小的cordova项目来显示这个bug。

通过这个例子,我在android清单中更好地检查了从1.4.1到1.5.0的变化,现在这个问题只在我的google nexus智能手机中偶尔出现。 当错误发生时,我在“LogCat”控制台中看到一条消息:与网络连接错误有关(但wi-fi信号仍然存在且很强)

EDIT2:实际上我看到的信息是 03-19 09:54:00.617:D/CordovaLog(2113):超时


因此,调用在大约20秒后“超时”,忽略$.ajax.timeout属性(设置为30秒)。

我可以确认该行为,我还使用其他rest服务测试了该功能,因此问题看起来与maps api无关。 奇怪的是,phonegap/android日志中没有显示错误消息。 顺便说一句,我已经切换到1.4.1,1.5.0现在看起来对我来说不可用:(

编辑:我已经创建了一个小的cordova项目来显示这个bug。

通过这个例子,我在android清单中更好地检查了从1.4.1到1.5.0的变化,现在这个问题只在我的google nexus智能手机中偶尔出现。 当错误发生时,我在“LogCat”控制台中看到一条消息:与网络连接错误有关(但wi-fi信号仍然存在且很强)

EDIT2:实际上我看到的信息是 03-19 09:54:00.617:D/CordovaLog(2113):超时


因此,调用在大约20秒后“超时”,忽略$.ajax.timeout属性(设置为30秒)。

这里是解释和修复: (最后一篇文章:链接到google group post)

问题出在cordova的androids脚本第4831行: 改变


下面是解释和修复: (最后一篇文章:链接到google group post)

问题出在cordova的androids脚本第4831行: 改变


该问题通常与jquery ajax调用相关。尝试使用XmlHttpRequest而不是$ajax…结果相同。该问题通常与jquery ajax调用相关。尝试使用XmlHttpRequest而不是$ajax…结果相同。
channel.onNativeReady.subscribe(_self.boot);
channel.onNativeReady.subscribeOnce(_self.boot);