Google Maps Android - 如何调用getMapAsync?

时间:2015-06-02 07:03:50

标签: android google-maps

我正在关注Google Dev guides中有关向应用添加地图的指南。我现在得到的唯一错误(无法解析类型)是带有此片段的MainActivity.java类中的getMapAsync。

MapFragment mapFragment = (MapFragment) getFragmentManager()
    .findFragmentById(R.id.map); mapFragment.getMapAsync(this);

根据指南,我必须这样做:

  

注意:必须从主线程调用getMapAsync(),并且   回调将在主线程中执行。如果是Google Play服务   没有安装在用户的设备上,回调将不会   触发,直到用户安装Play服务。

我不知道如何从主线程调用getMapAsync。有点新的。有帮助吗?

2 个答案:

答案 0 :(得分:2)

package your.app.name;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends Activity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.addMarker(new MarkerOptions()
                .position(new LatLng(0, 0))
                .title("Marker"));
    }

    //onCreateOptionsMenu: no changes    
    //onOptionsItemSelected: no changes
}

当然,总是假设您的activity_main.xml已包含正确的片段代码,AndroidManifest.xml也包含android.geo.API_KEY。

答案 1 :(得分:2)

您在this方法中使用getMapAsync(this)。在您的情况下,this是活动,而getMapAsync则需要MapFragment的引用。传递实施MapFragment的{​​{1}}的引用。