0
我有一個類對象,它檢索用戶的經度和緯度。在我的UI線程創建,創建活動在onCreate方法的對象:Android用戶位置返回0.0的經度和緯度
userLocation = new UserLocation(this);
這裏是類片段:
public UserLocation(Context mContext) {
//Pass parameter to class field:
this.mContext = mContext;
//Fetch the user's location:
fetchUserLocation();
}
public void fetchUserLocation() {
// Acquire a reference to the system Location Manager:
LocationManager locationManager = (LocationManager)this.mContext.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates:
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
//Manage the data recieved:
makeUseOfLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
private void makeUseOfLocation(Location location) {
//Split the data of the location object:
userLatitude = location.getLatitude();
userLongitude = location.getLongitude();
}
/**
* @return userLatitude
*/
public double getLatitude() {
return userLatitude;
}
/**
* @return userLongitude
*/
public double getLongitude() {
return userLongitude;
}
現在又回到了主線程,當按下一個按鈕,緯度和經度收集:
// GET THE LATITUDE AND LONGITUDE OF THE USER:
currentLatitude = userLocation.getLatitude();
currentLongitude = userLocation.getLongitude();
現在對於說我啓動應用程序,如果我按那個按鈕向右走,收到的數值是經度和緯度0.0。
但是,如果我啓動應用程序並等待4-5秒,然後按按鈕,然後接收正確的值。
誰能告訴我這種行爲的原因?
我注意到,當我寫一個方法,當用戶啓動應用程序,如果一個字段爲空,然後收集經度和緯度。那麼這反過來又會返回不利的0.0值。
謝謝!
好吧,這是有道理的!那麼如果我傳遞一個參考給我的UI類,並調用一個方法來處理這個數據一旦onLocationChanged被調用它可以工作。唯一的問題是,每次更改位置時都會發出該呼叫。我只想在用戶按下按鈕時更新信息,您是否知道解決方法? –
@VesicaPiscis:說實話,我不確定你的意思。但它聽起來像你要麼一直在監聽信息,要麼等待用戶點擊按鈕,然後註冊監聽器,並且*只在你被回叫時更新UI *(和取消訂閱)。在不瞭解應用程序的情況下,很難說哪種最合適。您只需要考慮如何將位置更新的異步特性集成到您的應用中。 –