2011-03-18 7 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

スタックトレース全体を追加できますか? –

+0

、93行目はどこですか? – fazo

答えて

3

これは奇妙です:

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

あなたが場所がNULLであることを期待しているようです。しかし、その上の2行は場所を使ってメンバ関数を呼び出します。 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鉱山)

最後のkからデータ を示す場所を返します:あなたはこれを読んでいるだろう指定されたプロバイダから取得した不特定の場所の修正 。この は、プロバイダ を起動しなくても実行できます。この場所は、 が期限切れになっている可能性があります。たとえば、 のデバイスをオフにして別の場所 に移動した場合などです。 プロバイダが現在無効になっている の場合、nullが返されます。

+0

正解と速くなるための+1: – WarrenFaith

+0

はい友人が正しいので、経度または緯度がゼロになったらどうすればよいですか? – shripal

+0

テストされていないので、マイナーなバグがありますが、そのアイデアは明確です。最初に、後で割り当ててください:) – Nanne

1

ロケーションを使用した後にのみヌルかどうかを確認します。 longtitude/latitudeへの代入時にnullになることがあります。

+0

もし私が経度または緯度がnullになったら、どうすればいいですか? – shripal

関連する問題