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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

918閲覧

Nullpointerexceptionについて

suguru_sato

総合スコア23

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」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2020/01/24 13:14

編集2020/01/26 05:09

前提・実現したいこと

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

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

error

12020-01-26 13:36:57.826 18887-18887/com.example.sharemap2 E/AndroidRuntime: FATAL EXCEPTION: main 2 Process: com.example.sharemap2, PID: 18887 3 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 4 at com.example.sharemap2.fragment_upload_root.startLocation(fragment_upload_root.java:105) 5 at com.example.sharemap2.fragment_upload_root.onActivityCreated(fragment_upload_root.java:89)

該当のソースコード

fragment

1package com.example.sharemap2; 2 3import android.Manifest; 4import android.app.Activity; 5import android.content.Context; 6import android.content.pm.PackageManager; 7import android.graphics.Color; 8import android.location.Criteria; 9import android.location.Location; 10import android.location.LocationListener; 11import android.location.LocationManager; 12import android.location.LocationProvider; 13import android.os.Bundle; 14 15import androidx.annotation.NonNull; 16import androidx.annotation.Nullable; 17import androidx.core.app.ActivityCompat; 18import androidx.fragment.app.Fragment; 19 20import android.util.Log; 21import android.view.LayoutInflater; 22import android.view.View; 23import android.view.ViewGroup; 24import android.widget.Button; 25import android.widget.CompoundButton; 26import android.widget.TextView; 27 28import com.google.android.gms.location.FusedLocationProviderClient; 29import com.google.android.gms.location.LocationServices; 30import com.google.android.gms.maps.CameraUpdateFactory; 31import com.google.android.gms.maps.GoogleMap; 32import com.google.android.gms.maps.MapView; 33import com.google.android.gms.maps.OnMapReadyCallback; 34import com.google.android.gms.maps.SupportMapFragment; 35import com.google.android.gms.maps.model.LatLng; 36import com.google.android.gms.maps.model.PolylineOptions; 37import com.google.android.material.bottomnavigation.BottomNavigationView; 38 39import java.util.ArrayList; 40import java.util.List; 41 42 43public class fragment_upload_root extends Fragment implements OnMapReadyCallback, LocationListener, 44 View.OnClickListener,CompoundButton.OnCheckedChangeListener { 45 46 private static LocationManager locationmanager1; 47 private static GoogleMap mMap; 48 private MapView mapView; 49 private static final int LOCATION_CODE = 100; 50 private static final String[] LOCATION_PERMISSION = { 51 Manifest.permission.ACCESS_FINE_LOCATION, 52 Manifest.permission.ACCESS_COARSE_LOCATION 53 }; 54 private static final int GRANTED = PackageManager.PERMISSION_GRANTED; 55 private List<LatLng> mRunList = new ArrayList<LatLng>(); 56 private LatLng latlong, latlong2; 57 private static Location location1; 58 private static Button mButton; 59 60 61 @Override 62 public View onCreateView(LayoutInflater inflater, ViewGroup container, 63 Bundle savedInstanceState) { 64 return inflater.inflate(R.layout.fragment_upload, container, false); 65 } 66 67 @Override 68 public void onActivityCreated(@Nullable Bundle savedInstanceState) { 69 super.onActivityCreated(savedInstanceState); 70 locationmanager1 = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 71 72 try { 73 if(locationmanager1 != null) { 74 Log.d("a","OK-reach-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); 75 } else { 76 throw new NullPointerException(); 77 } 78 } catch(NullPointerException e) { 79 e.printStackTrace(); 80 } 81 82 83 if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) != GRANTED && 84 ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) != GRANTED) { 85 // ↓「アクセスを許可しますか?」 86 requestPermissions(LOCATION_PERMISSION, LOCATION_CODE); 87 } else { 88 //許可されたら位置取得 89 //下の行にNull 90 startLocation(); 91 } 92 93 } 94 95 //許可されたら位置取得、のところ 96 void startLocation() { 97 if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) == GRANTED || 98 ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) == GRANTED) { 99 100 // 許可を得られたことを確認できた段階で初めてsetContentView()を呼ぶ 101 // onMapReady()が走るのはこれ以後になる 102 103 //FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity()); 104 SupportMapFragment mapFragment =(SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map); 105 mapFragment.getMapAsync(this); 106 //この行にNul 107 } 108 } 109 110 @Override 111 public void onMapReady(GoogleMap googleMap) { 112 113 mMap = googleMap; 114 mMap.setMyLocationEnabled(true); 115 Log.d("a","OKabc"); 116 117 if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) == GRANTED || 118 ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) == GRANTED) { 119 120 121 Criteria criteria = new Criteria(); 122 //以下位置情報の精度を設定、高精度にした 123 criteria.setAccuracy(Criteria.ACCURACY_FINE); 124 //基準を満たすプロバイダ名を取得する 125 String provider = locationmanager1.getBestProvider(criteria, true); 126 // 最後の位置情報取得 127 location1 = locationmanager1.getLastKnownLocation(provider); 128 129 double lat = location1.getLatitude(); 130 double lon = location1.getLongitude(); 131 latlong = new LatLng(lat, lon); 132 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlong, 19)); 133 134 mButton=(Button)getActivity().findViewById(R.id.button) ; 135 mButton.setOnClickListener(this); 136 137 //プロバイダーに基づいた リスナー を登録する 138 //最低0秒、最低0mで発火、これより細かい更新はされない 139 140 //locationmanager1.removeUpdates(this); 141 142 } 143 144 } 145 146 public void onClick(View view){ 147 switch (view.getId()) { 148 case R.id.button: 149 if (ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[0]) == GRANTED || 150 ActivityCompat.checkSelfPermission(getActivity(), LOCATION_PERMISSION[1]) == GRANTED) { 151 152 locationmanager1.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 153 locationmanager1.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 154 } 155 break; 156 } 157 } 158 159 // アクセス許可のダイアログで操作を行ったときに呼ばれるメソッド 160 @Override 161 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 162 super.onRequestPermissionsResult(requestCode, permissions, grantResults); 163 if (requestCode == LOCATION_CODE) { 164 if (grantResults[0] == GRANTED) { 165 startLocation(); 166 } else { 167 // 拒否されたのならアプリ続行不可能 168 getActivity().finish(); 169 } 170 } 171 172 } 173 174 175 @Override 176 public void onDestroy() { 177 super.onDestroy(); 178 locationmanager1.removeUpdates(this); 179 } 180 181 182 @Override 183 public void onStatusChanged(String provider, int status, Bundle extras) { 184 switch (status) { 185 case LocationProvider.AVAILABLE: 186 Log.d("debug", "LocationProvider.AVAILABLE"); 187 break; 188 case LocationProvider.OUT_OF_SERVICE: 189 Log.d("debug", "LocationProvider.OUT_OF_SERVICE"); 190 break; 191 case LocationProvider.TEMPORARILY_UNAVAILABLE: 192 Log.d("debug", "LocationProvider.TEMPORARILY_UNAVAILABLE"); 193 break; 194 } 195 } 196 197 @Override 198 public void onLocationChanged(Location location) { 199 //LatLng curr = new LatLng(location.getLatitude(), location.getLongitude()); 200 //mMap.animateCamera(CameraUpdateFactory.newLatLng(curr)); 201 202 double lat = location.getLatitude(); 203 double lon = location.getLongitude(); 204 latlong2 = new LatLng(lat, lon); 205 206 TextView text=(TextView)getActivity().findViewById(R.id.textView1); 207 text.setText(latlong2.toString()); 208 209 drawTrace(latlong2); 210 } 211 212 @Override 213 public void onProviderEnabled(String s) { 214 Log.d("Tag","enable"); 215 } 216 217 //ロケーションプロバイダが利用不可能になるとコールバックされる 218 @Override 219 public void onProviderDisabled(String s) { 220 Log.d("Tag","provider,disable"); 221 } 222 223 @Override 224 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 225 226 } 227 228 //mRunListの緯度経度のリストをポリラインオプションの要素に加える 229 private void drawTrace(LatLng latlng) { 230 mRunList.add(latlng); 231 PolylineOptions polyOptions = new PolylineOptions(); 232 for (LatLng polyLatLng : mRunList) { 233 polyOptions.add(polyLatLng); 234 } 235 236 polyOptions.color(Color.BLUE); 237 polyOptions.width(4); 238 polyOptions.geodesic(false); 239 mMap.addPolyline(polyOptions); 240 241 } 242 243} 244 245

試したこと

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

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

startLocation()内に Log.d("tag","Null-bbbbbbbbbbbbbbbbbbbbbbbbbb");を入れてビルドしたところ確認できたためstartLocationは実行されています。Nullなら実行されないのでは?と思ってしまうのですが。

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

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

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

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

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

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

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

guest

回答1

0

自己解決

activity

1 <FrameLayout 2 android:id="@+id/fragment" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 app:layout_constraintBottom_toBottomOf="parent" 6 app:layout_constraintEnd_toEndOf="parent" 7 app:layout_constraintStart_toStartOf="parent" 8 app:layout_constraintTop_toTopOf="parent"/> 9

activityのレイアウトの問題でした。
最初はフラグメント→フレームレイアウトという感じです。

投稿2020/01/26 11:40

suguru_sato

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問