web-dev-qa-db-ja.com

AndroidシンボルメソッドgetMap()が見つかりません

携帯電話で正常に動作する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ポインター例外を取得しようとしました。これを修正する方法はありますか?ありがとうございました。

8
Julia

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);
    }
7
Kintan Patel

this で提案したとおり。

getMap()は非推奨です。次の方法で、代わりにgetMapAsync()を使用してください。

これを交換してください

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap();

これとともに

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMapAsync(this);

詳細については、こちらをご覧ください link

4
Ironman

getMapAsync(this)メソッドを使用できます。 詳細はこのリンクを確認してください

2

交換

googleMap = ((SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.googleMap)).getMap();

googleMap = ((SupportMapFragment) getChildFragmentManager()
    .findFragmentById(R.id.map)).getMapAsync((OnMapReadyCallback);this);
1
Prathap Reddy

確かにSupportMapFragmentMapFragmentの不一致はクラス属性があるかどうかを意味します

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"

その後、あなたがやっているようにあなたは好きなことができます。

0
Shree Krishna