2014-02-05 49 views
2

這似乎是一個常見的問題,但我真的不明白爲什麼會發生,即使我讀噸simialr問題。我設置了一切 - 權限(FINE和COARSE),我已經在DDMS中設置了座標,我也試過使用telnet然後,但是不管它是什麼總是崩潰與getlastknownknownocation位置的線上的空指針異常,任何想法什麼是錯的?安卓getlastknownlocation總是空的模擬器

public class MainActivity extends Activity implements LocationListener { 



private static LocationManager ok; 
private Location L; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    ok=(LocationManager)this.getSystemService(ok.GPS_PROVIDER); 
    L=ok.getLastKnownLocation(ok.GPS_PROVIDER); 












} 

@Override 
public void onLocationChanged(Location Loc) { 


    try { 


     double latop=Loc.getLatitude(); 
     double longe=Loc.getLongitude(); 

     Log.i("OK", "and"+longe+""+latop); 


    } catch (NullPointerException e) 

    { 

    } 




} 
+0

有幾件事錯在這裏(例如不檢查其供應商正在試圖獲得位置之前,啓用或可用),可能會導致你的錯誤。不過,我會建議您閱讀[本文檔](http://developer.android.com/training/location/retrieve-current.html),瞭解如何獲取用戶位置。由於要使當前的代碼正常工作所需的更改次數,重新開始可能會更有效。 – Rarw

+2

如果沒有最後一個已知位置,則getlastknownlocation將返回null,如果不調用更新,則需要檢查是否有最終知識位置。我從不嘗試使用模擬器的位置,因爲我真的需要做一些事情,使其能夠像啓用位置服務的普通電話那樣工作。所以我的猜測是你總是變得空,因爲你正在使用模擬器。另外GPS在外面工作得很好,在你家裏面也許會失敗,並且不會爲你提供位置。 – Tobiel

+0

仿真器將如何給位置value.for測試中,我們必須使用默認的經緯度爲仿真器是內部ddms-emulatorcontrol.you必須使用設備獲取位置值.. – Ranjit

回答

7

getLastKnownLocation()一般將返回null,如果沒有應用程序請求位置定位從您想要的供應商最近。

在模擬器上,它似乎更進一步:除非已將應用程序調用至模擬器,否則您不會獲取位置,因爲您的應用程序調用了requestLocationUpdates()

使用getLastKnownLocation()的一般模式,如果你想獲得一個實際Location體面的賠率,是使用requestLocationUpdates()removeLocationUpdates()確保LocationManager正在積極尋求通過您所選擇的供應商的位置。當然,如果您願意,也可以使用LocationListeneronLocationChanged(),而不是getLastKnownLocation()

+0

優秀!非常感謝 –