【问题标题】:How to fix getMapAsync(this) crash?如何修复 getMapAsync(this) 崩溃?
【发布时间】:2017-05-27 20:36:44
【问题描述】:

嘿,我正在尝试让位置服务在 Android Studio 上运行,而 .getMapAsync(this) 不断使应用程序崩溃。如果有人能告诉我我在哪里搞砸了,我将不胜感激。

GoogleMap memberMap;
GoogleApiClient memberAPI;
LocationRequest memberLocationRequest;

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

        setContentView(R.layout.activity_main_page);

        onMapReady(memberMap);
    } else {
        Toast.makeText(this, "Google services not available", Toast.LENGTH_LONG);
        //to be done
    }
}
@Override
public void onMapReady(GoogleMap googleMap) {
    memberMap = googleMap;

    //memberMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    SupportMapFragment mapFragment =(SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.mapfragment);
    mapFragment.getMapAsync(this);





    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if(!locationManager.isProviderEnabled((LocationManager.GPS_PROVIDER))){
        buildAlertMessageNoGps();
    }

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            buildGoogleApiClient();
            memberMap.setMyLocationEnabled(true);
        }
    }

}

【问题讨论】:

标签: java android google-maps maps


【解决方案1】:

onCreate() 方法调用getMapAsync(this)

更新您的代码如下:

GoogleMap memberMap;
GoogleApiClient memberAPI;
LocationRequest memberLocationRequest;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (googleServicesAvailable()) {
        setContentView(R.layout.activity_main_page);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment);
        mapFragment.getMapAsync(this);
    } else {
        Toast.makeText(this, "Google services not available", Toast.LENGTH_LONG);
    }
}

@Override
public void onMapReady(GoogleMap googleMap) {
    memberMap = googleMap;

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if(!locationManager.isProviderEnabled((LocationManager.GPS_PROVIDER))){
        buildAlertMessageNoGps();
    }

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            buildGoogleApiClient();
            memberMap.setMyLocationEnabled(true);
        } else {
            buildGoogleApiClient();
            memberMap.setMyLocationEnabled(true);
        }
    }

    // Add markers
    LatLng sydney = new LatLng(-34, 151);
    memberMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    memberMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

...................
...............

这里有一些关于GoogleMapLocation API 的好教程:

  1. Developing an Android app having Google Maps
  2. Google Map Tutorial in Android Studio: How to get current location in Android Google Map
  3. Android Developer’s Guide to the Google Location Services API

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 2018-01-18
    • 2021-12-10
    • 1970-01-01
    • 2015-05-29
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多