0

先に進む前に、ユーザーのGPS位置を見つける必要があるアプリを作成しています。私はLocationListenerインターフェースを実装することによってこれを行っています。

public void onLocationChanged(Location loc) {
    // TODO Auto-generated method stub
    if(loc!=null){
        loc.getLatitude();
        loc.getLongitude();
        text = "My current location is: " + "Latitude = " + loc.getLatitude() + "Longitude = " + loc.getLongitude();
        Toast.makeText(getApplicationContext(),text, Toast.LENGTH_SHORT).show();
    }
}

しかし、getApplicationContext()メソッドでNullPointerExceptionが発生しています。MyClass.thisも試しましたが、同じ結果になりました。onCreateに表示すると、トーストは正常に機能します。これに似た他の質問を調べましたが、どの解決策も機能しませんでした。次のように、onCreateでsetContentViewを使用しています。

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gpslocation);
}

logcatはこれを示しています:

03-14 14:05:48.396: E/AndroidRuntime(604): FATAL EXCEPTION: main
03-14 14:05:48.396: E/AndroidRuntime(604): java.lang.NullPointerException
03-14 14:05:48.396: E/AndroidRuntime(604):  at emergency.app.MyLocationListener.onLocationChanged(MyLocationListener.java:53)
03-14 14:05:48.396: E/AndroidRuntime(604):  at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:227)
03-14 14:05:48.396: E/AndroidRuntime(604):  at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:160)
03-14 14:05:48.396: E/AndroidRuntime(604):  at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:176)
03-14 14:05:48.396: E/AndroidRuntime(604):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 14:05:48.396: E/AndroidRuntime(604):  at android.os.Looper.loop(Looper.java:137)
03-14 14:05:48.396: E/AndroidRuntime(604):  at android.app.ActivityThread.main(ActivityThread.java:4340)
03-14 14:05:48.396: E/AndroidRuntime(604):  at java.lang.reflect.Method.invokeNative(Native Method)
03-14 14:05:48.396: E/AndroidRuntime(604):  at java.lang.reflect.Method.invoke(Method.java:511)
03-14 14:05:48.396: E/AndroidRuntime(604):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-14 14:05:48.396: E/AndroidRuntime(604):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-14 14:05:48.396: E/AndroidRuntime(604):  at dalvik.system.NativeStart.main(Native Method)

誰かがこれを克服する方法を教えてもらえますか?私はアンドロイドの初心者なので、本当に助けが必要です!

4

3 に答える 3

0

以下のコードを試してください

Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        if (msg.what == 0) {
            Toast.makeText(YourActivity.this, (String) msg.obj,
                    Toast.LENGTH_SHORT).show();
        }
    };
};


public void onLocationChanged(Location loc) {
// TODO Auto-generated method stub
    if(loc!=null){
        loc.getLatitude();
        loc.getLongitude();
        text = "My current location is: " + "Latitude = " + loc.getLatitude() + "Longitude = " + loc.getLongitude();

        Message msg = new Message();
        msg.what=0;
        msg.obj= text;
        handler.sendMessage(msg);
    }
}
于 2013-03-13T13:40:02.253 に答える