2012-03-21 32 views
0

我有一個問題,我試圖創建一個使用位置管理器但不是當前正在運行的活動的類。所以當我從任何活動中調用這個類時,它都會在後臺完成。我試過擴展服務,但一直返回空指針錯誤。Android位置管理器返回空指針異常

這是這行代碼返回錯誤。

public class BackgroundGps extends Service{ 
UserObject uo = null; 
BackgroundGps(UserObject userObj){ 
    uo = userObj; 
    uo.setHeader("GPSUpdate"); 
} 
public void locationListener(){ 
    LocationManager mlocManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 
    LocationListener mlocListener = new LocationListener(){ 
     public void onLocationChanged(Location location){ 
      if(uo.getLatitude() == ("" + location.getLatitude()) && uo.getLongitude() == ("" + location.getLongitude())){} 
      else{ 
       uo.setLatitude("" + location.getLatitude()); 
       uo.setLongitude("" + location.getLongitude()); 
       updateGPS(); 
      } 
     } 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
     public void onProviderEnabled(String provider) {} 
     public void onProviderDisabled(String provider) {} 
    }; 
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, mlocListener); 
    mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 5, mlocListener); 
} 

感謝

+0

你在仿真器或設備上運行嗎? – Sid 2012-03-21 19:16:20

+0

當前正在設備上運行。 – Arran 2012-03-21 19:45:10

回答

1

獲取對系統的位置管理的參考

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

的LocationManager不會拋出一個設備上的空指針,將在模擬器

與註冊監聽器位置管理器接收位置更新。在這裏,您可以使用NETWORK_PROVIDER OR GPS_PROVIDER等根據自己的需要*

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
+0

它仍然返回錯誤。我附加了更多的代碼。 – Arran 2012-03-21 19:39:25

+0

您可能正在運行來自任何Activity的BackgroundGps服務,將活動的上下文傳遞給此服務並使用, – 2012-03-22 03:57:22

0

你需要調用getSystemService()在當前Context。當你打電話給這門課時,你是否通過了當前的Context

0

你真的開始服務使用intents?

如果你沒有,並且只是在你的Activity中創建了一個new BackgroundGps(),那麼該服務沒有上下文(null)。