質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2048閲覧

Androidアプリで自分の位置情報を地図に反映したい

javac

総合スコア29

GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/09/20 13:41

編集2015/09/20 14:01

acitivity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_height="fill_parent" android:layout_width="fill_parent"> <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.google.android.gms.maps.SupportMapFragment"/> </RelativeLayout>

MainActivity.java

public class MainActivity extends FragmentActivity { GoogleMap map; Location currentLocation; LocationManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); MapsInitializer.initialize(this); } @Override public void onResume() { super.onResume(); if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Location Manager"); builder.setMessage("位置情報をONにしますか?"); builder.setPositiveButton("はい", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); moveToYourLocation(); } }); builder.setNegativeButton("いいえ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); builder.create().show(); } else { moveToYourLocation(); } } protected void moveToYourLocation(){ CameraUpdate cu = CameraUpdateFactory.newLatLngZoom(new LatLng((float)currentLocation.getLatitude(), (float)currentLocation.getLongitude()), 13); map.moveCamera(cu); }

GPS機能がONになっていない場合はダイアログを表示して、ONにするように促します。
OFFの場合はアプリを終了させます。
ONになった後に自分の位置情報をマップに反映させ表示したいのですが、問題が発生したとされ強制終了されます。
moveToYourLocation()がnullだと表示されるのですが、失敗する原因が良く分かりません。
どこが間違っているのでしょうか?

----追記のエラーログです----
java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
at com.examples.mymapactivity.MainActivity.moveToYorLocation(MainActivity.java:65)
at com.examples.mymapactivity.MainActivity$1.onClick(MainActivity.java:48)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

フィールドcurrentLocationがnewされていないためではないでしょうか。
メソッドがnullになることは無いので、エラーログを読み間違えているようです。エラーログ全部を追記していただけると、もっと答えられると思います。

投稿2015/09/20 13:54

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javac

2015/09/20 14:02

ご指摘ありがとうございます。エラーログを追記しました。
yona

2015/09/20 14:21

やはりcurrentLocationがnewされてい無いためヌルポが発生しています。 現在位置でcurrentLocationを初期化してください。
javac

2015/09/20 15:02

currentLocationにmanager.getLastKnownLocation(LocationManager.GPS_PROVIDER);を代入するなど試しましたが失敗しました。
yona

2015/09/20 15:21

失敗とはどういった物ですか? 位置がおかしいのか、エラーで落ちたのか、コンパイルできなかったのかいろいろありますよね? メソッドの中にはnullを返す物もたくさんあります。とりあえず、任意の緯度経度でcurrentLocationを初期化してみてください。
javac

2015/09/21 03:15

LocationListenerのonLocationChangedメソッドを使うと、currentLocationがnullでなくなりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問