2012-05-02 7 views
2

一部のAndroidコードに問題があります。 GeoPointLocationに変換する方法を検索したところ、答えが返ってくると思われるthis質問が見つかりましたが、情報を使用するとプログラムがnullポインタ例外で失敗します。Geopointを場所に変換する際のヌルポインタ例外

マイコード:

lat = 52.3725979; 
    longt = 4.8998594; 
    final GeoPoint geo_1 = new GeoPoint((int) (lat * 1E6),(int) (longt * 1E6)); 

    double latitude = geo_1.getLatitudeE6()/1E6; 
    double longitude = geo_1.getLongitudeE6()/1E6; 

    endLoc.setLatitude(latitude); 
    endLoc.setLongitude(longitude); 

ライン171:endLoc変数の

endLoc.setLatitude(latitude); 

初期化:

public class VibroNavActivity extends Activity implements SensorListener{ 


final static String TAG = "VibroNavActivity"; 

//location variables 
GeoPoint startGeo; 
GeoPoint endGeo; 
Location loc = null; 
Location startLoc; 
Location endLoc; 
float totalDistance;//the distance between the startpoint end the endpoint 

ログイン:

05-02 12:40:56.789: W/dalvikvm(27983): threadid=1: thread exiting with uncaught exception (group=0x40a4b1f8) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): FATAL EXCEPTION: main 
    05-02 12:40:56.800: E/AndroidRuntime(27983): java.lang.RuntimeException: Unable to start activity ComponentInfo{hcm.haska/hcm.haska.VibroNavActivity}: java.lang.NullPointerException 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.os.Handler.dispatchMessage(Handler.java:99) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.os.Looper.loop(Looper.java:137) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at java.lang.reflect.Method.invokeNative(Native Method) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at dalvik.system.NativeStart.main(Native Method) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): Caused by: java.lang.NullPointerException 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at hcm.haska.VibroNavActivity.onCreate(VibroNavActivity.java:171) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.Activity.performCreate(Activity.java:4465) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
    05-02 12:40:56.800: E/AndroidRuntime(27983): ... 11 more 
+0

VibronNavActivity.javaの171行目のコードを具体的に記述する必要があります。私が推測しなければならないのは、endLoc.setLatitude(latitude)です。 – MikeIsrael

+0

on line 171 endLocはNullPointerExceptionを投げています。 endLocをどこで初期化していますか? –

+0

警告、リンクされた投稿の解決策にはバグがあります。あなたは浮動小数点または二重で除算する必要があります。 –

答えて

3

endLocを初期化していない場合は、変数として宣言するだけです。

あなたのコンストラクタで

、またはどこかlese線171前の方法では、あなたはあなたが唯一のendLocを宣言したendLoc = new Location();

+0

ありがとう、問題は実際に初期化されました。解決策:endLoc =新しい場所( "gps"); – user1321928

+0

@cjk良いコール:) –

0

を必要とする、と呼ばれますが、メモリは、この時点で割り当てられることはありません。あなたは呼び出すことでメモリを初期化する必要があります。

endLoc = new Location(....) 
0

場所コンストラクタは、プロバイダ文字列を必要としますが、私はどこか、それは一瞬で空の文字列

loc = new Location(""); 

テストすることができ、それ見ました。

関連する問題