2013-07-10 72 views
1

我已經爲gps請求位置做了一個類,所以在我可以在我的活動中使用這個類來請求經度和緯度後,但我總是這個錯誤,我不明白爲什麼。 ..error gps requestLocationUpdates android

我此logcat的:

07-10 17:13:49.645: E/AndroidRuntime(10269): FATAL EXCEPTION: main 
07-10 17:13:49.645: E/AndroidRuntime(10269): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.provags/com.example.provags.MainActivity}: java.lang.NullPointerException 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.os.Looper.loop(Looper.java:137) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at java.lang.reflect.Method.invokeNative(Native Method) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at java.lang.reflect.Method.invoke(Method.java:511) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at dalvik.system.NativeStart.main(Native Method) 
07-10 17:13:49.645: E/AndroidRuntime(10269): Caused by: java.lang.NullPointerException 
07-10 17:13:49.645: E/AndroidRuntime(10269): at com.example.provags.Gps.getLocation(Gps.java:19) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at com.example.provags.Gps.<init>(Gps.java:16) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at com.example.provags.MainActivity.onCreate(MainActivity.java:16) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.Activity.performCreate(Activity.java:4465) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-10 17:13:49.645: E/AndroidRuntime(10269): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
07-10 17:13:49.645: E/AndroidRuntime(10269): ... 11 more 

對於由GPS請求位置的方法。似乎每個正常的,但它不工作:(

public class Gps implements LocationListener { 
Context myContext; 
Location posizione; 
double latitudine,longitudine; 
LocationManager locationManager; 
public Gps(Context c){ 
    myContext=c; 
    getLocation(); 
} 
public Location getLocation(){ 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
    if(locationManager!=null){ 
     posizione=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     if(posizione!=null){ 
      latitudine=posizione.getLatitude(); 
      longitudine=posizione.getLongitude(); 
     } 
    } 
    return posizione; 
} 

public double latitudine(){ 
    if(posizione!=null){ 
     latitudine=posizione.getLatitude(); 
    } 
    return latitudine; 
} 
public double longitudine(){ 
    if(posizione!=null){ 
     longitudine=posizione.getLongitude(); 
    } 
    return longitudine; 
} 
public void stopGps(){ 
    if (locationManager!=null){ 
     locationManager.removeUpdates(Gps.this); 
    } 
} 
@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

} 

你能幫助我嗎???

+0

快速的問題:在你的構造你定義' getLocation();'但你的'getLocation()'函數返回'Location',對吧?它不應該像'位置l = getLocation();'在Gps'構造函數中嗎? –

+1

它指向錯誤發生的代碼行(第19行):com.example.provags.Gps.getLocation(Gps.java:19)。我的猜測是LocationManager爲空 – Jack

回答

1

你有沒有初始化的LocationManager你叫locationManager.requestLocationUpdates過嗎?

GPS構造函數,你可能想嘗試

locationManager = (LocationManager)c.getSystemService(Context.LOCATION_SERVICE); 
+0

非常感謝它解決了我的問題 – tafazzi87

0

你在的LocationManager進行操作,然後檢查是否爲空:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
    if(locationManager!=null){ 

問題是locationManager是null。你可能會喜歡這樣的if語句中移動這樣的:

if(locationManager!=null){ 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

你也需要實際獲得位置管理的地方,如Selecsosi說:

locationManager = (LocationManager)c.getSystemService(Context.LOCATION_SERVICE); 
相關問題