1

ユーザーの地理的位置を利用するアプリを構築しています。アイデアは、ユーザーが 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` を追加したので、問題にはなりません。

何か案は?ありがとうございました。

4

2 に答える 2

1

この行:

Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

location が null の可能性があります。null を確認する必要があります。

于 2012-11-09T15:37:19.803 に答える
0

SDK の vm をエミュレータとして使用している場合。

telnet localhost 5554

次に、エミュレータの位置を次のように設定します

geo fix <longitude value> <latitude value>

私はあなたが使用できるgithubにいくつかのコードを持っています

https://github.com/billmcnamara/BarcelonaTravelGuide.Android

于 2012-11-09T17:33:06.220 に答える