PhoneGap 1.5.0 Cordova - геокодер Google не работает после нескольких запросов (Android) - PullRequest
2 голосов
/ 14 марта 2012

Я использую PhoneGap 1.5.0 Cordova для Android, я изменил официальный тестовый пример PhoneGap Android и протестировал его на двух разных телефонах.Я отправляю запросы геокодирования Google, но после нескольких итераций он просто перестает работать.тот же код был в порядке с 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;
}

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

здесь объяснение и исправление: Переопределение поведения кнопки Android работает только на первой странице с PhoneGap (последнее сообщение: ссылка на сообщение группы Google).

Проблема в скриптах кордовы для андроидов, строка 4831: изменить

channel.onNativeReady.subscribe(_self.boot);

с

channel.onNativeReady.subscribeOnce(_self.boot);
1 голос
/ 14 марта 2012

Я могу подтвердить поведение, я протестировал эту вещь также с помощью других служб отдыха, поэтому проблема выглядит не связанной с API карты. Странно то, что сообщения об ошибках не отображаются в журнале PhoneGap / Android. Кстати, я перешел на 1.4.1, 1.5.0 сейчас выглядит непригодным для меня: (

РЕДАКТИРОВАТЬ: я создал небольшой проект Cordova, который показывает ошибку. http://dl.dropbox.com/u/2663849/AjaxBug.zip

В этом примере я немного лучше проверил изменения с 1.4.1 до 1.5.0 в манифесте Android, и теперь эта проблема возникает только изредка в моем смартфоне Google Nexus. Когда происходит ошибка, я вижу сообщение в консоли «LogCat»: что-то связано с ошибкой сетевого подключения (но сигнал Wi-Fi все еще присутствует и сильный)

EDIT2: На самом деле сообщение, которое я вижу, 03-19 09: 54: 00.617: D / CordovaLog (2113): время ожидания

Таким образом, вызов «прерывается» примерно через 20 секунд, игнорируя свойство $ .ajax.timeout (установлено на 30 секунд).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...