0

Google지도를로드하려고하는 FragmentActivity가 있습니다. 그리고 그것은 OnMapReadyCallBack을 구현하고지도를 팽창 시키려고 할 때 mapFragment 객체를 얻지 만 getMapAsync가 호출 된 후 응용 프로그램이 충돌합니다. 다음은 내 코드입니다 :onMapReady가 호출되지 않음 : FrgmentActivity의 Google지도 : Android Studio

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가 객체를 얻고 있지만 결코 어떤 방법에 관한 때 내 GoogleMap으로 객체가 null하고 응용 프로그램 충돌을하게 onMapReady 방법을 도달하지 것으로 나타났습니다 googleMap (예 : setOnCameraChangeListener)이 호출되고 있습니다. 내가 documentation page을 통과했지만 내 프로젝트에서 작동하지 않는 것 같습니다.

프로젝트에 누락 된 부분이 있습니까? 이 오류를 어떻게 극복하고 앱을 중단해야합니까?

TIA

편집 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에 전화를 걸지 않았는지 확인하십시오. 즉, 메소드가 실행되기 전에 null 인 경우 확인을 추가하십시오. 또한 @Nullable 특수 효과를 private GoogleMap googleMap;에 추가하면 Null 체크가 누락 된 경우 Android 스튜디오에서 알려주므로 개발에 도움이됩니다.

+0

그럼 코드를 재정렬하여 어떻게 작동시켜야합니까? onMapReady 내에서 이미 googleMap 객체를 시작하고 있습니다. –

+0

'googleMap'이 설정되기 전에는 아무것도 사용하지 말고, googleMap이 null이 아닐 때 아무것도 보장하지 마십시오. – Ryan

+0

감사합니다. ryan. 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

음. 나는 해결책을 얻었다. onCreate에서 이전에 호출 된 onMapReady로 googleMap 즉 setOnCameraChangeListener와 관련된 메소드를 이동했습니다. onCreate의 googleMap 객체가 null로 인해 앱이 중단되었습니다.

+0

그런 추한 해킹! – AlexTa

+0

참. 나는 이틀 동안 이걸 고민했고이 간단한 해킹으로 해결되었다. –