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

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

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

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

Android Studio

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

Q&A

受付中

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

hinanonano_
hinanonano_

総合スコア12

Java

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

Android Studio

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

1回答

0グッド

1クリップ

3159閲覧

投稿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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

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

投稿2017/02/17 09:02

yona

総合スコア18147

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

hinanonano_

2017/02/17 09:27

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

2017/02/17 09:44

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

2017/02/22 00:09

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

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android Studio

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