2016-08-01 8 views
1

내 SDK를 업데이트하기 전에 작업 코드를 가지고 있습니다 (나중에 참조 할 수있는 날짜를 물어보십시오). .getMap은 더 이상 사용되지 않겠다고 경고하지만 현재는 유효한 입력으로 인식되지 않습니다. API 24 (Android Nougat)의 새 릴리스로 인해이 문제가 발생한 것으로 가정합니다. 누구든지 변경하는 데 도움이 수내 프로젝트를 getMapAsync와 호환되게하려면 어떻게해야합니까?

private boolean initMap() { 
     if (mMap == null) { 
      MapFragment mapFrag = 
        (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
      mMap = mapFrag.getMapAsync(); 
     } 
     return (mMap != null); 
    } 

경우 내가 정말 감사하겠습니다 .getMapAsync()을 통합 : 속히 여기에 코드입니다.

감사합니다.

UPDATE : 여기에 대한 답변의 제안을보고 한 후 새롭게 업데이트 된 코드 (이것은에서 onCreate에없는이)입니다 -

private boolean initMap() { 
     if (mMap == null) { 
      MapFragment mapFrag = (MapFragment) getFragmentManager() 
        .findFragmentById(R.id.map); 
      mapFrag.getMapAsync(this); 
     } 
      return (mMap != null); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     if (googleMap != null) { 
      mMap = googleMap; 
     } 
    } 
+0

시도해 보셨습니까? 당신은 문서를 참조하여 시도해보고, 어떤 일이 일어나는지 볼 수 있습니까? – nasch

+0

@nasch 빈 괄호에'(GoogleMaps googlemaps)'를 추가하려했지만 작동하지 않았습니다. – petnamedsteve

+0

왜 그렇게 했습니까? 문서에는'GoogleMap'이 아니라'OnMapReadyCallback'을 전달한다고 나와 있습니다. – nasch

답변

1

당신이 필요가있는 무엇 : 당신의 Gradle을 파일에

1. compile 'com.google.android.gms:play-services-maps:9.2.0'을 (최신지도 lib), 당신이 그것을 사용할 수없는 경우 최신 도구를 다운로드해야 할 수도 있습니다.

2.지도 조각을로드하는 활동은 OnMapReadyCallback을 구현해야합니다. (이것은 가장 쉬운 방법이며, OnMapReadyCallback을 구현하는 다른 클래스를 만들 수 있습니다.)

귀하의 initMap 잘못이다, 그것은을 반환 할 수 없습니다 SO 게시물에 코드를 편집 한 후

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    /// additiona code here 
    MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
    mapFrag.getMapAsync(this); //this is instance of your activity. 
    //maybe code here 
} 

//callback method from OnMapReadyCallback 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    if (googleMap != null) { 
     mMap = googleMap; 
     //now the map is loaded, you can use it 
    } 
} 

편집 : 활동 onCreate 방법 3.In

는, 다음을 수행해야 boolean 값이 getMapAsync이므로 이름이 async라고 말하면 메서드가 실행되고 즉시 완료 될 때까지 기다릴 필요가 없음을 의미하므로 return (mMap != null);은 거의 항상 false을 반환합니다. 지도가로드되었는지 확인하려면 onMapReady을 사용해야합니다.

+0

답변 해 주셔서 감사합니다! 업데이트 된 코드를 확인하십시오 : D – petnamedsteve

+0

@petnamedsteve 제 수정 된 답변을 확인하십시오. – danypata

+0

나는 당신을 얻지 못해 미안합니다. 나는 당신을 올바르게 잡으면 "onMapReady"에 "if map null"을 넣어야합니다. 그렇다면 정확한 코드를 제공하는 방법을 이해할 수 없기 때문에 숟가락으로 피드를 보내주십시오. 감사! – petnamedsteve

1

당신은 OnMapReadyCallback 구현이

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

처럼 전화 (예를 들어) 당신의 actifity를 확인해야합니다. 그런 다음 다시 매핑 메소드 onMapReady (GoogleMap googleMap)를 재정의

+0

는 내 답변 순간을 게시 한 것처럼 보입니다.))) –

+0

답변 해 주셔서 감사합니다! 업데이트 된 코드를 살펴보십시오 : D – petnamedsteve

관련 문제