2014-02-07 96 views
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值。

謝謝!

回答

0

誰能告訴我這種行爲的原因?

好的 - 大概是當它顯示0,0,onLocationChanged尚未被調用 - 因爲位置不知道立即。您已經要求位置管理員在知道位置時回電 - 這與立即獲取位置不同。

如果你不希望它被稱爲前報告的位置給用戶,你應該記住onLocationChanged是否已被調用(或者甚至可能上次叫,避免顯示陳舊的數據)。

+0

好吧,這是有道理的!那麼如果我傳遞一個參考給我的UI類,並調用一個方法來處理這個數據一旦onLocationChanged被調用它可以工作。唯一的問題是,每次更改位置時都會發出該呼叫。我只想在用戶按下按鈕時更新信息,您是否知道解決方法? –

+0

@VesicaPiscis:說實話,我不確定你的意思。但它聽起來像你要麼一直在監聽信息,要麼等待用戶點擊按鈕,然後註冊監聽器,並且*只在你被回叫時更新UI *(和取消訂閱)。在不瞭解應用程序的情況下,很難說哪種最合適。您只需要考慮如何將位置更新的異步特性集成到您的應用中。 –