0

私はGoogleマップをロードしようとしているFragmentActivityを持っています。そしてそれはOnMapReadyCallBackを実装し、マップを膨張させようとするとmapFragmentオブジェクトを取得しますが、getMapAsyncが呼び出された後にアプリケーションがクラッシュします。以下は私のコードです:onMapReadyが呼び出されていない:FrgmentActivityのGoogleマップ:Androidスタジオ

public class MapActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap googleMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_map); 

    initializeMap(); 
    } 

    private void initializeMap() { 
     if (googleMap == null) { 
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
      if(mapFragment!=null){ 
       mapFragment.getMapAsync(MapActivity.this); 
      } 

      // check if map is created successfully or not 
      if (null== googleMap) { 
       Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     googleMap = map; 
     googleMap.setMyLocationEnabled(true); 
    } 
} 

私はdegugしようとしましたが、私はmapFragmentオブジェクトを取得していますが、どの方法がに関連するとき、それは私のGoogleマップオブジェクトがnullにすることができますonMapReady方法とアプリのクラッシュに到達したことがないことに気づきましたgoogleMap(例:setOnCameraChangeListener)が呼び出されています。私はdocumentation pageを通過しましたが、私のプロジェクトではうまくいかないようです。

私のプロジェクトには何かがありますか?このエラーをどのように克服して、アプリがクラッシュするのをやめてください。

TIA

EDIT 1:以下

xmlファイル内の私の地図の断片が

<fragment 
    android:id="@+id/map" 
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MapsActivity" 
    android:name="com.google.android.gms.maps.SupportMapFragment"/> 
+0

R.layout.activity_mapを表示できますか? – AlexTa

+0

質問の編集を確認してください。 –

答えて

2

ヒントは、getMapAsync(asynchronous)です。

onMapReadyはすぐに呼び出されません。これは、メソッドが呼び出されるまでgoogleMapが設定されないことを意味します。

編集:メソッドを実行していないことを確認するには、マップ値が設定される前にgoogleMapを呼び出します。つまり、メソッドが実行される前にヌルである場合はチェックを追加します。また@Nullableアノテーションをprivate GoogleMap googleMap;に追加すると、ヌルチェックがない場合にAndroidスタジオから警告が表示されるため、開発に役立ちます。

+0

それで、私のコードをどのように並べ替えるべきですか?私はすでにonMapReady内のgoogleMapオブジェクトを開始しています。 –

+0

'googleMap'が設定される前に何も使用しないことを確認してください。' googleMap'がnullにならないことを覚えておいてください。 – Ryan

+0

ありがとうございます。 googleMapでnullを確認すると、エラーを修正できました。どのようにエラーを取り除いたのか私の答えをチェックしてください。 –

0

mapFragment.getMapAsync(MapActivity.this);はマップが非同期にロードされることを意味し、ロードがonMapReady()にコールバックを終了した場合に意志であります作られる。

マップがまだ読み込みを完了していないため、次のコードは機能しません。地図をonMapReady()の方法で設定し、initializeMap()の中には設定しないでください。

if (null == googleMap) { // googleMap will still be null here 
    Toast.makeText(getApplicationContext(), "Sorry! unable to create maps", Toast.LENGTH_SHORT).show(); 
} 
+0

それで、コードをどのように再配置して動作させるべきですか?以前はonMapReady内のgoogleMapオブジェクトを既に開始しています。 –

0

私は解決策を得た。私は、onMreateにgoogleMap、すなわちsetOnCameraChangeListenerに関するメソッドを以前onCreateで呼び出されていたものに移しました。 onCreateのgoogleMapオブジェクトがnullだったため、アプリがクラッシュしました。

+0

このような醜いハック! – AlexTa

+0

真。私はこれを2日間苦労し、この単純なハックはそれを解決しました –

関連する問題