2017-04-10 85 views
0

我的問題更關係到tizen和S2。我正在從API中獲取天氣,我正在嘗試每15分鐘做一次。儘管如此,某些地方正在崩潰,而我無法使用這個控制檯日誌。我的猜測是,它與屏幕處於活動狀態或非活動狀態有關。從互聯網瀏覽器嘗試時,它工作正常。javascript setInterval錯誤檢查

var weatherVar = setInterval(runWeather, 900000); 

function runWeather() { 
    getLocation(); 
} 

function getLocation() { 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(showPosition); 
    } 
    else { 
     alert("Geolocation is not supported by this browser."); 
    } 
} 

function showPosition(position) { 
    var geoLat = position.coords.latitude, 
     geoLong = position.coords.longitude, 
     key = "my API key", 
     WeatherURL = "http://api.wunderground.com/api/" + key + 
     "/conditions/q/" + geoLat + "," + geoLong + ".json"; 


    $.ajax({ 
     url : WeatherURL, 
     dataType : "jsonp", 
     success : function(parsed_json) { 
     var tempF = parsed_json['current_observation']['temp_f']; 
     var weatherDescription = parsed_json['current_observation']['icon']; 

     document.getElementById("currentTemp").innerHTML = tempF + '°'; 
     document.getElementById("condition").innerHTML = weatherDescription; 
     } 
    }); 
} 

編輯,我最初周圍的一些變量張貼這當某種原因發生變化。這些問題已得到解決,與所述問題無關。

我試過的另一種方法是將當前時間與從天氣報告中提取的時間戳進行比較。不過,我的時間每隔半秒鐘更新一次,所以在啓動呼叫和生成天氣報告之間的延遲時間內,我一直在地下地下百次。爲了解決這個問題,我創建了一個變量,並在啓動調用時爲其賦值-1。然後,當天氣報告返回時,它會根據天氣時間戳將該值更改爲數字。但是,這也有問題,我嘗試創建一個錯誤檢查,包括在變量變爲-1時隨時創建的第二個計時器。它會等一會兒,看看它是否仍然是-1,如果是,它會嘗試再次運行getLocation。不過,這導致我再次平了吳。有什麼想法嗎?謝謝!

+0

我添加了一個提醒,並且間隔沒有問題。問題似乎是當屏幕處於非活動狀態時,因爲警報的位置使得調用網絡的功能在我點擊確定之前不會運行。打好意味着屏幕是活躍的,我從來沒有遇到過問題。我想這是對更多tizen具體研究。 –

+0

我評論過快。也許改變連接是一個問題。我離開了我的Wi-Fi連接了一下,我的警報停止了。不太清楚這將如何連接到警報。 –

+0

您是否在config.xml中添加了互聯網特權和域訪問權限? –

回答

0

與Chrome一樣,setInterval定時器在屏幕處於非活動狀態時急劇減速。問題是我的錯誤檢查也依賴於間隔計時器,該計時器設置的時間間隔相對較長。由於爲時間顯示器供電的計時器設置爲500毫秒,因此我使用該計時器將當前時間與天氣報告生成的時間戳進行比較。當需要提取天氣數據時,我添加了一個計數器來增加每個間隔。如果在x個計數器生成之前天氣時間戳沒有用新數字更新,那麼它將嘗試再次提取數據。