[MapsActivity.java]
Java
1public class MapsActivity extends FragmentActivity 2 implements OnMapReadyCallback, LocationListener, 3 CompoundButton.OnCheckedChangeListener { 4 private GoogleMap mMap; 5 private LatLng latlong; 6 private static Location location1; 7 LocationManager locationmanager1; 8 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_maps); 14 SupportMapFragment mapFragment = 15 (SupportMapFragment) getSupportFragmentManager() 16 .findFragmentById(R.id.map_goo_fra); 17 mapFragment.getMapAsync(this); 18 19 locationmanager1 = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 20 Criteria criteria = new Criteria(); 21 criteria.setAccuracy(Criteria.ACCURACY_FINE); 22 String provider = locationmanager1.getBestProvider(criteria, true); 23 if (ActivityCompat.checkSelfPermission(this, 24 Manifest.permission.ACCESS_FINE_LOCATION) != 25 PackageManager.PERMISSION_GRANTED && 26 ActivityCompat.checkSelfPermission(this, 27 Manifest.permission.ACCESS_COARSE_LOCATION) != 28 PackageManager.PERMISSION_GRANTED) { 29 // ↓「アクセスを許可しますか?」 30 requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_CODE); 31 return; 32 } else { 33 locationmanager1.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 34 } 35 location1 = locationmanager1.getLastKnownLocation(provider); 36 } 37 38 39 @Override 40 public void onMapReady(GoogleMap googleMap) { 41 mMap = googleMap; 42 lat = location1.getLatitude(); // ★186行目 43 lon = location1.getLongitude(); 44 latlong = new LatLng(lat, lon); 45 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlong, 19)); 46 locationmanager1.removeUpdates(this); 47 } 48 49 50 @Override 51 public void onStatusChanged(String provider, int status, Bundle extras) { 52 switch (status) { 53 case LocationProvider.AVAILABLE: 54 Log.d("debug", "LocationProvider.AVAILABLE"); 55 break; 56 case LocationProvider.OUT_OF_SERVICE: 57 Log.d("debug", "LocationProvider.OUT_OF_SERVICE"); 58 break; 59 case LocationProvider.TEMPORARILY_UNAVAILABLE: 60 Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE"); 61 break; 62 } 63 } 64 @Override 65 public void onLocationChanged(Location location) { 66 LatLng curr = new LatLng(location.getLatitude(), location.getLongitude()); 67 mMap.animateCamera(CameraUpdateFactory.newLatLng(curr)); 68 } 69 @Override 70 public void onProviderEnabled(String s) { 71 } 72 @Override 73 public void onProviderDisabled(String s) { 74 } 75}
アプリ起動時だけ現在位置座標を取得し、ぞの座標位置を画面の中央に表示させる、ということをしたいです。
.getLatitude()、.getLongitude() で緯度経度の数値を取得したいのですが、上記のコードを実行すると
2-15 01:16:49.256 11700-11700/jp.path.appname E/AndroidRuntime: FATAL EXCEPTION: main Process: jp.path.appname, PID: 11700 java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference at jp.path.appname.MapsActivity.onMapReady(MapsActivity.java:186)
とのエラーから、onMapReady において location1 が空だという内容です。
.getLastKnownLocation の代入が効いていないようにも読めます。
お知恵をお借りできますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/15 04:07
2018/12/18 10:58 編集