ユーザーの地理的位置を利用するアプリを構築しています。アイデアは、ユーザーが DataEntry アクティビティに移動すると、アプリがユーザーの場所を取得し、TextView に String 値 (元の 2 倍の緯度/経度値から変換された値) を入力するというものです。私はそれを機能させるのに苦労していますが、どこが間違っているのかわかりません。場所を取得しようとしている場所で DE.Java アクティビティをロードすると、NullPointerException エラーが発生します。場所の値が初期化されていないと信じさせられますが、私には初期化されているように見えます!
DE.java に関連するコードは次のとおりです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_entry);
txtBuildingName=(EditText)this.findViewById(R.id.nameContent);
txtDescription=(EditText)this.findViewById(R.id.descriptionContent);
txtLongitude=(TextView)this.findViewById(R.id.TextViewLong);
txtLongitude.setText(getLongitude());
project=(Spinner)findViewById(R.id.type_project);
ArrayAdapter<CharSequence> adapterTwo = ArrayAdapter.createFromResource(this, R.array.type_project_array, android.R.layout.simple_spinner_item);
project.setAdapter(adapterTwo);
getLongitude()
メソッドのコードは次のとおりです。
public String getLongitude(){
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
longitude = location.getLongitude();
String longRes = String.valueOf(longitude);
return longRes;
}
現在、アプリはまだ開発中であるため、現時点では GPS をオンにし、コマンド ラインで telnet 接続と geo fix コマンドを使用していくつかの位置値を入力しましたLocationProvider
。今のところ、GPS は常に利用可能であると想定できます。
以下は、LOGCAT ログのプリアウトです。
11-09 14:55:17.301: E/AndroidRuntime(546): FATAL EXCEPTION: main
11-09 14:55:17.301: E/AndroidRuntime(546): java.lang.RuntimeException: Unable to start activity ComponentInfo{application.prototype.mfb/application.prototype.mfb.DataEntry}: java.lang.NullPointerException
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.os.Handler.dispatchMessage(Handler.java:99)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.os.Looper.loop(Looper.java:137)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.ActivityThread.main(ActivityThread.java:4424)
11-09 14:55:17.301: E/AndroidRuntime(546): at java.lang.reflect.Method.invokeNative(Native Method)
11-09 14:55:17.301: E/AndroidRuntime(546): at java.lang.reflect.Method.invoke(Method.java:511)
11-09 14:55:17.301: E/AndroidRuntime(546): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-09 14:55:17.301: E/AndroidRuntime(546): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-09 14:55:17.301: E/AndroidRuntime(546): at dalvik.system.NativeStart.main(Native Method)
11-09 14:55:17.301: E/AndroidRuntime(546): Caused by: java.lang.NullPointerException
11-09 14:55:17.301: E/AndroidRuntime(546): at application.prototype.mfb.DataEntry.getLongitude(DataEntry.java:181)
11-09 14:55:17.301: E/AndroidRuntime(546): at application.prototype.mfb.DataEntry.onCreate(DataEntry.java:54)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.Activity.performCreate(Activity.java:4465)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-09 14:55:17.301: E/AndroidRuntime(546): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
11-09 14:55:17.301: E/AndroidRuntime(546): ... 11 more
Manifest.XML ファイルにも正しいACCESS_FINE_LOCATION
'ACCESS_COARSE_LOCATION` を追加したので、問題にはなりません。
何か案は?ありがとうございました。