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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

3573閲覧

現在地の緯度経度を取得したい

hinanonano_

総合スコア12

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2017/02/17 09:01

編集2017/02/17 09:30

###前提・実現したいこと
Java Android Studioを使用しています。
アプリで、現在地の緯度経度を取得したいです。

現在地取得のプログラム自体は殆どが参考にしたサイトと同じソースです。
https://akira-watson.com/android/fusedlocationproviderapi.html

###発生している問題・エラーメッセージ
現在地取得のjavaを起動するとアプリが強制終了してしまいます。

エラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: main
Process: myapp.andoroidbook.jp.application2, PID: 17662
java.lang.RuntimeException: Unable to start activity ComponentInfo{myapp.andoroidbook.jp.application2/myapp.andoroidbook.jp.application2.LocateActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at myapp.andoroidbook.jp.application2.LocateActivity.onCreate(LocateActivity.java:70)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5001) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
at dalvik.system.NativeStart.main(Native Method) 

###該当のソースコード
EatActivity.java(略)からLocationActivity.javaをIntentで起動、そこからLocateActivity.javaを起動

EatActivity.java

search.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(EatActivity.this, LocationActivity.class); startActivity(intent); } });

LocationActivity.java

import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class LocationActivity extends AppCompatActivity { private final int REQUEST_PERMISSION = 10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_locate); if(Build.VERSION.SDK_INT >= 23){ checkPermission(); } else{ locationActivity(); } } // 位置情報許可の確認 public void checkPermission() { // 既に許可している if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)== PackageManager.PERMISSION_GRANTED){ locationActivity(); } // 拒否していた場合 else{ requestLocationPermission(); } } // 許可を求める private void requestLocationPermission() { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) { ActivityCompat.requestPermissions(LocationActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION); } else { Toast toast = Toast.makeText(this, "許可されないとアプリが実行できません", Toast.LENGTH_SHORT); toast.show(); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, REQUEST_PERMISSION); } } // 結果の受け取り @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_PERMISSION) { // 使用が許可された if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { locationActivity(); return; } else { // それでも拒否された時の対応 Toast toast = Toast.makeText(this, "これ以上なにもできません", Toast.LENGTH_SHORT); toast.show(); } } } // Intent でLocation private void locationActivity() { Intent intent = new Intent(getApplication(), LocateActivity.class); startActivity(intent); } }

LocateActivity.java

LocateActivity.java

1 2import android.Manifest; 3import android.app.Activity; 4import android.content.Intent; 5import android.content.pm.PackageManager; 6import android.location.Location; 7import android.location.LocationListener; 8import android.location.LocationManager; 9import android.os.Bundle; 10import android.provider.Settings; 11import android.support.v4.app.ActivityCompat; 12import android.widget.TextView; 13 14 15public class LocateActivity extends Activity implements LocationListener { 16 17 @Override 18 public void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_locate); 21 if (ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 22 && ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 23 24 final int requestCode = 1; 25 26 ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, requestCode ); 27 return; 28 } 29 30 LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 31 String locationProvider = null; 32 33 if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 34 locationProvider = LocationManager.GPS_PROVIDER; 35 } 36 37 else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 38 locationProvider = LocationManager.NETWORK_PROVIDER; 39 } 40 41 else { 42 Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 43 startActivity(settingsIntent); 44 return; 45 } 46 47 /** 位置情報の通知するための最小時間間隔(ミリ秒) */ 48 final long minTime = 500; 49 /** 位置情報を通知するための最小距離間隔(メートル)*/ 50 final long minDistance = 1; 51 52 // 利用可能なロケーションプロバイダによる位置情報の取得の開始 53 // FIXME 本来であれば、リスナが複数回登録されないようにチェックする必要がある 54 locationManager.requestLocationUpdates(locationProvider, minTime, minDistance, this); 55 // 最新の位置情報 56 Location location = locationManager.getLastKnownLocation(locationProvider); 57 58 if (location != null) { 59 TextView textView = (TextView) findViewById(R.id.location); 60 textView.setText(String.valueOf( "onCreate() : " + location.getLatitude()) + "," + String.valueOf(location.getLongitude())); 61 } 62 63 } 64 65 //位置情報が通知されるたびにコールバックされるメソッド 66 @Override 67 public void onLocationChanged(Location location){ 68 TextView textView = (TextView) findViewById(R.id.location); 69 textView.setText(String.valueOf("onLocationChanged() : " + location.getLatitude()) + ":" + String.valueOf(location.getLongitude())); 70 } 71 72 //ロケーションプロバイダが利用不可能になるとコールバックされるメソッド 73 @Override 74 public void onProviderDisabled(String provider) { 75 //ロケーションプロバイダーが使われなくなったらリムーブする必要がある 76 } 77 78 //ロケーションプロバイダが利用可能になるとコールバックされるメソッド 79 @Override 80 public void onProviderEnabled(String provider) { 81 //プロバイダが利用可能になったら呼ばれる 82 } 83 84 //ロケーションステータスが変わるとコールバックされるメソッド 85 @Override 86 public void onStatusChanged(String provider, int status, Bundle extras) { 87 // 利用可能なプロバイダの利用状態が変化したときに呼ばれる 88 } 89 90 91} 92

###補足情報(言語/FW/ツール等のバージョンなど)

Java Android Studio
実機 Nexus7 android 4.4.4

何か足りない情報等ありましたらご指摘願います。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

Activityを追加して使用する場合はAndroidManifestにactivityタグを新しく追加しないといけません。

投稿2017/02/17 09:02

yona

総合スコア18155

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

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

hinanonano_

2017/02/17 09:27

回答ありがとうございます。追加してから実行したらIntentが起動しました! しかし違うエラーが・・・もしお時間あればもう一度見ていただけたらと思います。
yona

2017/02/17 09:44

もともとの質問から掛け離れた内容に修正するのはダメですよ。質問の修正を元に戻して別の質問として再投稿してください。 また、ついでだから聞くではなく、エラーが変わったら自分で考えてから質問してください。 エラーログを読めばわかる内容ですよね? LocateActivity.javaの70行目でヌルポインタです。
hinanonano_

2017/02/22 00:09

そうですよね、その点もご指摘いただきありがとうございます。 お礼が遅れたことも重ねてお詫び申し上げます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問