Проблема с индикатором занятости worklight v6.0 на Android

На Android (устройство HTC Incredible S и виртуальное устройство Android), когда я перехожу к моему «где я?» страница:

  1. init и показывает индикатор занятости "Проверка вашего местоположения"
  2. загрузить гугл карты апи
  3. геолокация и отображение карты Google
  4. скрытие индикатора занятости

Когда я впервые захожу на эту страницу, индикатор занятости никогда не отображается.

Во второй раз, когда я захожу на эту страницу, индикатор занятости «Загрузка» останавливает мое приложение. я должен убить процесс вне приложения.

Когда я удаляю строки кода для индикатора занятости, мое приложение работает нормально.

Вот код с зависанием индикатора занятости:

// Geolocation of collaborators
var map;
function initialize() {
    var busyInd = new WL.BusyIndicator('content', {text : 'Checking your location...'});
    busyInd.show();
    console.log('Initializing google Maps');

      // Try HTML5 geolocation
    if(navigator.geolocation) {
        var options = { timeout: 30000, enableHighAccuracy: true };

      navigator.geolocation.getCurrentPosition(function(position) {
        var mapOptions = {
                      zoom: 6,
                      streetViewControl: false,
                      mapTypeControl: false,
                      mapTypeId: google.maps.MapTypeId.ROADMAP
                    };
        map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

        var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
        var infowindow = new google.maps.InfoWindow({
          map: map,
          position: pos,
          content: 'You are here',
          maxWidth: 60
        });
        map.setCenter(pos);
      }, function(error) {
          console.log('Hiding busy indicator when geolocation failed');
    busyInd.hide();
        handleNoGeowith location(true, error);
      }, options);
    } else {
      // Browser doesn't support Geolocation
      handleNoGeolocation(false);
      busyInd.hide();
    }
busyInd.hide();
}

function handleNoGeolocation(errorFlag, error) {
  console.log('Handle no geolocation message error');
var content;
if (errorFlag) {
  var errorCode = error.code;
  var errorMsg = error.message;
  content = 'Error: The Geolocation service failed. Code: '+errorCode+', Message: '+errorMsg;
} else {
  content = 'Error: Your browser doesn\'t support geolocation.';
}

alert(content);
}
var isGMapAPILoaded = false;
function loadGoogleMaps() {
  console.log('initializing google maps api');
    if(isGMapAPILoaded){
        // Google Maps API already loaded
        console.log('Google Maps API already loaded, call initialize');
        initialize();
    } else {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize";
        document.body.appendChild(script);
        isGMapAPILoaded = true;
        console.log('Google Maps API loaded with success');
  }
 }

person ptitjuju69    schedule 27.06.2013    source источник


Ответы (1)


Пробовали ли вы создать объект индикатора занятости глобально, а не внутри этой конкретной функции (я также не понимаю объем этой функции "инициализации"... Я предполагаю, что это код, специфичный для приложения).

В файле .js вашего приложения (yourProject\apps\yourApp\common\yourApp.js) сделайте что-то вроде этого:

var busy;

function wlCommonInit() {

    busy = new WL.BusyIndicator();

Затем в вашей функции initialize() при необходимости вызовите busy.show() и busy.hide().

person Idan Adar    schedule 27.06.2013