質問編集履歴

2

試したことの追加

2020/01/26 05:09

投稿

suguru_sato
suguru_sato

スコア23

test CHANGED
File without changes
test CHANGED
@@ -548,6 +548,8 @@
548
548
 
549
549
 
550
550
 
551
+ startLocation()内に Log.d("tag","Null-bbbbbbbbbbbbbbbbbbbbbbbbbb");を入れてビルドしたところ確認できたためstartLocationは実行されています。Nullなら実行されないのでは?と思ってしまうのですが。
552
+
551
553
  ### 補足情報(FW/ツールのバージョンなど)
552
554
 
553
555
  minSDK versionが28です。

1

質問内容の具体化

2020/01/26 05:09

投稿

suguru_sato
suguru_sato

スコア23

test CHANGED
@@ -1 +1 @@
1
- android studio mapviewを含むフラグメントの切り替えがうまくかない
1
+ Nullpointerexceptionにつ
test CHANGED
@@ -1,14 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- ようにメニュがuploadからsearchに変わるきにupload時だけでよボタンがsearch時に表示されしまいます
3
+ fragmentのコドでmapFragment.getMapAsync(this);のあとの行の何も書てないとこと startLocation();ところでエラーが起きています
4
-
5
- メニュータブと上に半分だけ見えてるtextviewのみがアクティビティで真ん中の部分はフラグメントです
6
-
7
- フラグメントが遷移する際にボタンの表示をなくしたいです
8
-
9
- ![イメージ説明](098ad8dd47199112ef26ff39a2f1588c.png)
10
-
11
- ![イメージ説明](541a090ea9e60aa9d4dd0944ec450e28.png)
12
4
 
13
5
 
14
6
 
@@ -16,34 +8,20 @@
16
8
 
17
9
 
18
10
 
19
- ビルドはできますがlogcatを見たところエラーがありました
20
-
21
11
  ```error
22
12
 
23
- 2020-01-24 20:43:57.568 1135-1135/com.example.sharemap2 E/AndroidRuntime: FATAL EXCEPTION: main
24
-
25
- Process: com.example.sharemap2, PID: 1135
26
-
27
- java.lang.NullPointerException:
28
-
29
- Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference at com.example.sharemap2.fragment_upload_root.onMapReady(fragment_upload_root.java:119)
13
+ 2020-01-26 13:36:57.826 18887-18887/com.example.sharemap2 E/AndroidRuntime: FATAL EXCEPTION: main
14
+
15
+ Process: com.example.sharemap2, PID: 18887
16
+
17
+ 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
18
+
19
+ at com.example.sharemap2.fragment_upload_root.startLocation(fragment_upload_root.java:105)
20
+
21
+ at com.example.sharemap2.fragment_upload_root.onActivityCreated(fragment_upload_root.java:89)
30
22
 
31
23
  ```
32
24
 
33
- 自分としてはfragment_upload_root内のonMapReadyでの
34
-
35
- location1 = locationmanager1.getLastKnownLocation(provider);
36
-
37
- double lat = location1.getLatitude();
38
-
39
- この部分がうまくいってなくて
40
-
41
- locationmanager1 = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
42
-
43
- でうまくlocationmanagerを取得できてないんだと思います(getSystemServiceの部分でカーソルを合わせるとmay produce Nullexceptionとなります)
44
-
45
- locationManagerをフラグメント内で取得することはムリなのでしょうか?
46
-
47
25
 
48
26
 
49
27
 
@@ -110,6 +88,10 @@
110
88
 
111
89
 
112
90
 
91
+ import com.google.android.gms.location.FusedLocationProviderClient;
92
+
93
+ import com.google.android.gms.location.LocationServices;
94
+
113
95
  import com.google.android.gms.maps.CameraUpdateFactory;
114
96
 
115
97
  import com.google.android.gms.maps.GoogleMap;
@@ -178,11 +160,41 @@
178
160
 
179
161
  Bundle savedInstanceState) {
180
162
 
163
+ return inflater.inflate(R.layout.fragment_upload, container, false);
164
+
165
+ }
166
+
167
+
168
+
169
+ @Override
170
+
171
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
172
+
173
+ super.onActivityCreated(savedInstanceState);
174
+
181
175
  locationmanager1 = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
182
176
 
183
177
 
184
178
 
179
+ try {
180
+
181
+ if(locationmanager1 != null) {
182
+
185
- View v = inflater.inflate(R.layout.fragment_upload, container, false);
183
+ Log.d("a","OK-reach-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
184
+
185
+ } else {
186
+
187
+ throw new NullPointerException();
188
+
189
+ }
190
+
191
+ } catch(NullPointerException e) {
192
+
193
+ e.printStackTrace();
194
+
195
+ }
196
+
197
+
186
198
 
187
199
 
188
200
 
@@ -198,27 +210,15 @@
198
210
 
199
211
  //許可されたら位置取得
200
212
 
213
+ //下の行にNull
214
+
201
- //startLocation();
215
+ startLocation();
202
-
203
- mapView = (MapView) v.findViewById(R.id.mapView);
216
+
204
-
205
- mapView.onCreate(savedInstanceState);
206
-
207
- mapView.onResume();
208
-
209
- mapView.getMapAsync(this);
210
-
211
-
212
-
213
- }
217
+ }
214
-
215
- return v;
218
+
216
-
219
+
220
+
217
- }
221
+ }
218
-
219
-
220
-
221
-
222
222
 
223
223
 
224
224
 
@@ -238,15 +238,13 @@
238
238
 
239
239
 
240
240
 
241
- //FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
241
+ //FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
242
-
242
+
243
- // SupportMapFragment mapFragment =(SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
243
+ SupportMapFragment mapFragment =(SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
244
-
245
-
246
-
244
+
247
- //mapFragment.getMapAsync(this);
245
+ mapFragment.getMapAsync(this);
246
+
248
-
247
+ //この行にNul
249
-
250
248
 
251
249
  }
252
250
 
@@ -524,15 +522,29 @@
524
522
 
525
523
 
526
524
 
525
+
526
+
527
527
  ```
528
528
 
529
529
 
530
530
 
531
531
  ### 試したこと
532
532
 
533
-
533
+ try {
534
+
534
-
535
+ startLocation();
536
+
537
+ } catch(NullPointerException e) {
538
+
539
+ e.printStackTrace();
540
+
535
- マップフラグメントをフラグメントに埋め込む感じでやっていましたが、onMapreadyの処理が機能しないことからレイアウトにMapviewを使うことにしました。
541
+ Log.d("tag","Null-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
542
+
543
+ }
544
+
545
+
546
+
547
+ を実行することでNullpointerExceptionが確認できました
536
548
 
537
549
 
538
550