携帯電話で正常に動作するgpsアプリがあります。ただし、本番環境ではヌルポインター例外が発生している人がいます。
_ SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
// Getting GoogleMap object from the fragment
googleMap = fm.getMap();
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
googleMap.setPadding(0, 0, 0, 90);
_
本番から取得しているエラーの原因は次のとおりです。
_Java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.Android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' on a null object reference
_
そこで、いくつかの調査を行ったところ、getMapメソッドが削除され、getMapAsync(this);
の使用が推奨されていることがわかりました。
_@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap; //which doesn't seem to work
}
_
ただし、さまざまなメソッドでgoogleMap
変数を参照しているため、すべてのコードをonMapReady
メソッドに移動することはできません。 onMapReady
メソッド内で_this.googleMap = googleMap
_を使用しようとしましたが、googleMap
変数を参照しようとすると常にNULLポインター例外が発生します。 onCreated()でgetMapAsync(this)を定義してから、onResume()で「googleMap」オブジェクトにアクセスし、nullポインター例外を取得しようとしました。これを修正する方法はありますか?ありがとうございました。
Googleマップオブジェクトを使用しようとしているが、Googleマップオブジェクトがまだnullであるため、nullポインター例外が発生しているため、この手順に従う必要があります。 onCreate()メソッドでこのコードを記述します
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
public class Demo implements OnMapReadyCallback
を使用してクラスを実装すると、onMapReady(Googlemap googleMap)methoodをオーバーライドする必要があります。 onMapReady()からのコールバック後にすべてのアクションを実行できます。
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
}
this で提案したとおり。
getMap()
は非推奨です。次の方法で、代わりにgetMapAsync()
を使用してください。
これを交換してください
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap();
これとともに
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMapAsync(this);
詳細については、こちらをご覧ください link
getMapAsync(this)
メソッドを使用できます。 詳細はこのリンクを確認してください
交換
googleMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.googleMap)).getMap();
と
googleMap = ((SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map)).getMapAsync((OnMapReadyCallback);this);
確かにSupportMapFragment
とMapFragment
の不一致はクラス属性があるかどうかを意味します
class ="com.google.Android.gms.maps.MapFragment"
XML
で使用する必要があります
MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map);
[〜#〜] or [〜#〜]
クラスattrのような場合
class="com.google.Android.gms.maps.SupportMapFragment"
その後、あなたがやっているようにあなたは好きなことができます。