2011-03-18 97 views
0
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
        double longitude = location.getLongitude(); 
        double latitude = location.getLatitude(); 


       if(location == null){ 
        longitude = 0.0; 
        latitude = 0.0; 
        Log.i("CURRENT LONGITUDE", ""+longitude); 
        Log.i("CURRENT LATITUDE", ""+latitude); 
       } 

       Log.i("CURRENT LONGITUDE", ""+longitude); 
       Log.i("CURRENT LATITUDE", ""+latitude); 

我得到的問題在線「double longitude = location.getLongitude();」這是MainActivity中的第93行;我越來越喜歡

03-18 16:52:26.928: ERROR/AndroidRuntime(9598): java.lang.NullPointerException 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at com.demo.parsing.MainActivity$1.onClick(MainActivity.java:93) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.View.performClick(View.java:2364) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.View.onTouchEvent(View.java:4179) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.widget.TextView.onTouchEvent(TextView.java:6540) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.View.dispatchTouchEvent(View.java:3709) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.os.Looper.loop(Looper.java:123) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-18 16:52:26.928: ERROR/AndroidRuntime(9598):  at dalvik.system.NativeStart.main(Native Method) 
+2

您可以添加整個堆棧跟蹤嗎? – 2011-03-18 11:20:56

+0

和93是哪裏? – fazo 2011-03-18 11:37:25

回答

3

這就奇怪了:

double longitude = location.getLongitude(); 
    double latitude = location.getLatitude(); 
    if(location == null){ 

看來你期望的位置可以爲NULL。但是上面的兩行使用位置來調用成員函數。如果它是NULL,那麼你將得到一個nullpointerexception。

響應您的評論:你可以很容易地通過改變事物的秩序修復:

Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER) 
double latitude; 
double longitude; 
if(location == null){ 
    longitude = 0.0; 
    latitude = 0.0; 
    Log.i("CURRENT LONGITUDE", ""+longitude); 
    Log.i("CURRENT LATITUDE", ""+latitude); 
}else{ 
    longitude = location.getLongitude(); 
    latitude = location.getLatitude(); 
} 

編輯2 如果你只需要快速瀏覽一下手冊: http://developer.android.com/reference/android/location/LocationManager.html

你會看到:(emph mine)

返回一個位置,指示從最後一個k開始的數據 從給定提供商處獲得的已知位置修復 。可以在不啓動 提供程序的情況下完成此 。請注意,此位置 可能已過時,例如,如果 設備已關閉並移至 另一個位置。 如果當前禁用提供程序 ,則返回null。

+0

+1爲正確的答案,並更快:) – WarrenFaith 2011-03-18 11:37:50

+0

是的朋友你是對的,所以我應該怎麼做,如果我得到零經度或緯度 – shripal 2011-03-18 11:42:15

+0

沒有測試,所以可能有一個小錯誤在那裏,但想法是明確的:檢查第一,稍後分配:) – Nanne 2011-03-18 11:46:27

1

您只有在使用它之後才檢查位置是否爲空。在分配到經度/緯度時它可能爲空。

+0

如果我得到零經度或緯度所以,我該怎麼辦? – shripal 2011-03-18 11:40:02