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

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

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

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

Android

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

Android Studio

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

解決済

Nullpointerexceptionについて

suguru_sato
suguru_sato

総合スコア0

Java

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

Android

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

Android Studio

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

1回答

0評価

0クリップ

6閲覧

投稿2020/01/24 13:14

編集2022/01/12 10:58

前提・実現したいこと

下記のfragmentのコードでmapFragment.getMapAsync(this);のあとの行の何も書いてないとこと startLocation();のところでエラーが起きています

発生している問題・エラーメッセージ

error

2020-01-26 13:36:57.826 18887-18887/com.example.sharemap2 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.sharemap2, PID: 18887 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference at com.example.sharemap2.fragment_upload_root.startLocation(fragment_upload_root.java:105) at com.example.sharemap2.fragment_upload_root.onActivityCreated(fragment_upload_root.java:89)

該当のソースコード

fragment

package com.example.sharemap2; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Color; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.fragment.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CompoundButton; import android.widget.TextView; import com.google.android.gms.location.FusedLocationProviderClient; import com.google.android.gms.location.LocationServices; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.PolylineOptions; import com.google.android.material.bottomnavigation.BottomNavigationView; import java.util.ArrayList; import java.util.List; public class fragment_upload_root extends Fragment implements OnMapReadyCallback, LocationListener, View.OnClickListener,CompoundButton.OnCheckedChangeListener { private static LocationManager locationmanager1; private static GoogleMap mMap; private MapView mapView; private static final int LOCATION_CODE = 100; private static final String[] LOCATION_PERMISSION = { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION }; private static final int GRANTED = PackageManager.PERMISSION_GRANTED; private List<LatLng> mRunList = new ArrayList<LatLng>(); private LatLng latlong, latlong2; private static Location location1; private static Button mButton; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_upload, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); locationmanager1 = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); try { if(locationmanager1 != null) { Log.d("a","OK-reach-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } else { throw new NullPointerException(); } } catch(NullPointerException e) { e.printStackTrace(); } if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) != GRANTED && ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) != GRANTED) { // ↓「アクセスを許可しますか?」 requestPermissions(LOCATION_PERMISSION, LOCATION_CODE); } else { //許可されたら位置取得 //下の行にNull startLocation(); } } //許可されたら位置取得、のところ void startLocation() { if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) == GRANTED || ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) == GRANTED) { // 許可を得られたことを確認できた段階で初めてsetContentView()を呼ぶ // onMapReady()が走るのはこれ以後になる //FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity()); SupportMapFragment mapFragment =(SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); //この行にNul } } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMyLocationEnabled(true); Log.d("a","OKabc"); if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) == GRANTED || ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) == GRANTED) { Criteria criteria = new Criteria(); //以下位置情報の精度を設定、高精度にした criteria.setAccuracy(Criteria.ACCURACY_FINE); //基準を満たすプロバイダ名を取得する String provider = locationmanager1.getBestProvider(criteria, true); // 最後の位置情報取得 location1 = locationmanager1.getLastKnownLocation(provider); double lat = location1.getLatitude(); double lon = location1.getLongitude(); latlong = new LatLng(lat, lon); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlong, 19)); mButton=(Button)getActivity().findViewById(R.id.button) ; mButton.setOnClickListener(this); //プロバイダーに基づいた リスナー を登録する //最低0秒、最低0mで発火、これより細かい更新はされない //locationmanager1.removeUpdates(this); } } public void onClick(View view){ switch (view.getId()) { case R.id.button: if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) == GRANTED || ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) == GRANTED) { locationmanager1.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); locationmanager1.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); } break; } } // アクセス許可のダイアログで操作を行ったときに呼ばれるメソッド @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == LOCATION_CODE) { if (grantResults[0] == GRANTED) { startLocation(); } else { // 拒否されたのならアプリ続行不可能 getActivity().finish(); } } } @Override public void onDestroy() { super.onDestroy(); locationmanager1.removeUpdates(this); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { switch (status) { case LocationProvider.AVAILABLE: Log.d("debug", "LocationProvider.AVAILABLE"); break; case LocationProvider.OUT_OF_SERVICE: Log.d("debug", "LocationProvider.OUT_OF_SERVICE"); break; case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE"); break; } } @Override public void onLocationChanged(Location location) { //LatLng curr = new LatLng(location.getLatitude(), location.getLongitude()); //mMap.animateCamera(CameraUpdateFactory.newLatLng(curr)); double lat = location.getLatitude(); double lon = location.getLongitude(); latlong2 = new LatLng(lat, lon); TextView text=(TextView)getActivity().findViewById(R.id.textView1); text.setText(latlong2.toString()); drawTrace(latlong2); } @Override public void onProviderEnabled(String s) { Log.d("Tag","enable"); } //ロケーションプロバイダが利用不可能になるとコールバックされる @Override public void onProviderDisabled(String s) { Log.d("Tag","provider,disable"); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } //mRunListの緯度経度のリストをポリラインオプションの要素に加える private void drawTrace(LatLng latlng) { mRunList.add(latlng); PolylineOptions polyOptions = new PolylineOptions(); for (LatLng polyLatLng : mRunList) { polyOptions.add(polyLatLng); } polyOptions.color(Color.BLUE); polyOptions.width(4); polyOptions.geodesic(false); mMap.addPolyline(polyOptions); } }

試したこと

try {
startLocation();
} catch(NullPointerException e) {
e.printStackTrace();
Log.d("tag","Null-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}

を実行することでNullpointerExceptionが確認できました

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

minSDK versionが28です。
実機でデバックしていて、android10です

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

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

Android

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

Android Studio

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。