2016-10-24 3 views
0

私はユーザーがGoogleマップにタグを付けることができるアプリを開発中です。これを行うには、マップのカメラ位置を特定の緯度/経度座標に移動できる必要があります。関連するメソッドは次のとおりです。moveCamera()は、NullPointerExceptionを発生させます。誰がなぜこれが起こっているのか考えているのですか?getMapAsyncメソッドの外部で呼び出されたときにmoveCameraが例外を引き起こすのはなぜですか?

+1

クラスレベルのインスタンス変数としてすでに 'mMap'があるようです。なぜあなたの 'moveMapCamera()'関数でGoogleMapオブジェクトをパラメータとして使うのでしょうか?代わりに 'mMap'を使用してください。 –

+0

はい、そうです。私は実際に自分のコードでこのメソッドを持っていません。代わりに、私はonCreateメソッドでこれを呼び出します。これは問題と関係がありますか? – JTM

+0

マップをインスタンス化するためにgetMapAsync()とonMapReady()コールバックを使用しようとしました。これはまだ動作していないようです。 onMapReady()コールバックが長すぎると感じています。追加のコードを実行する前にonMapReady()コールバックが完了するのを待つ方法がありますか? – JTM

答えて

0

コールバックonMapReady()は、非同期コールバックであるコード内で使用できる膨張/生成されたマップオブジェクトを提供します。これまでマップオブジェクトは初期化されていません。

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    map.moveCamera(center); 
} 

変更onMapReady()上記のスニペットのコード。また、あなたのonResumeにそれを行いたい場合は、マップオブジェクトがnull、それが動作するはずですあなたのonResume() でスニペット上記のヌル

if(mapFrag == null){ 
    mapFrag = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment); 
    mapFrag.getMapAsync(this) 
} 

利用の場合であれば

また、あなたは確認することができます。

0

この行をonMapReadyに移動します。マップ変数を初期化した後。

map.moveCamera(center); 

それ以外の場合、マップはnullです。どのメソッドを呼び出しても問題ありません。あなたが現在持っている場所ではnullになるでしょう。

また、使用する変数mMapまたはmapを正しく選択してください。次に、mapFragonCreateViewに初期化します。あなたはフラグメントを見つける行を持っていますが、何もしません。

関連する問題