当前位置: 首页 > 知识库问答 >
问题:

地图应用程序打开时崩溃

司徒斌
2023-03-14
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

GoogleMap googleMap;

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

    SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.frg_map);
    googleMap = supportMapFragment.getMap();
    googleMap.setMyLocationEnabled(true);

    supportMapFragment.getMapAsync(this);
}

public void onMapReady(GoogleMap googleMap) {
    googleMap.setMyLocationEnabled(true);

    Criteria criteria = new Criteria();
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    String mMapProvider = locationManager.getBestProvider(criteria, true);

    if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    Location location = locationManager.getLastKnownLocation(mMapProvider);
    if (location != null){
        onLcatonChanged(location);
    }
    locationManager.requestLocationUpdates(mMapProvider, 20000, 0, (LocationListener) this);

}

private void onLcatonChanged(Location location) {

    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    LatLng latLng = new LatLng(latitude, longitude);
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}}

下面给出的错误

process:com.example.rahul.maptask,pid:21986 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.rahul.maptask/com.example.rahul.maptask.mainactivity}:java.lang.nullpointerException:试图在Android.app.activitythread.performLaunchActivity(ActivityThread.handleLaunchActivity(ActivityThread.2339)的.java:2413)在Android.app.activityThread.Access$800(activityThread.java:155)在Android.app.activityThread.h.h.handleMessage(activityThread.java:1317)在Android.os.handler.dispatchMessage(handler.java:102)在Android.os.handler.dispatchMessage(handler.java:135)在Android.app.activityThread.main(activityThread.java:5343)在

共有1个答案

白青青
2023-03-14

问题是因为地图在开始活动后还没有准备好。您必须从API中使用getMapAsync方法

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

您的活动应该这样声明:

public class MainActivity extends FragmentActivity
    implements OnMapReadyCallback {
...
}

您必须实现回调,它以与在onCreate中相同的方式使用映射:

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

    Criteria criteria = new Criteria();
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    String mMapProvider = locationManager.getBestProvider(criteria, true);

    if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    Location location = locationManager.getLastKnownLocation(mMapProvider);
    if (location != null){
         onLcatonChanged(location);
    }
    locationManager.requestLocationUpdates(mMapProvider, 20000, 0, (LocationListener) this);
}
 类似资料:
  • 我只有一个窗口,在那里你推菜单->首选项并启动一个意图 它自动地表示必须关闭应用程序。 未捕获的处理程序:由于未捕获的异常导致线程主退出 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.app/com.example.app.PreferenciasGenerales}: java.lang.ClassCastException

  • 我尝试在1个应用程序中构建扫描仪和生成器。当我按下发电机按钮时,它突然崩溃了。我的日志中没有任何错误或警告。 这是我的生成器代码: 主活动代码: 有人知道怎么解决这个问题吗?请帮帮我。 更新 以下是我的生成器xml代码: 我希望这将有助于我的问题:( 更新:这是由我愚蠢的打字错误修正;)。非常感谢迄今为止所有回答我问题的人。我说不出我有多感激。特别是对于那个我已经投票支持正确答案的家伙。你真是个英

  • 我做了一个SAX解析器,它接受输入流作为文件进行解析。如果我使用本地文件,它可以工作,但如果我试图从internet获取它,当它打开输入流时就会崩溃。 这里有代码: 我已经尝试了几种方法,我在其他问题中看到过,它总是在或类似的地方崩溃。 提前道谢。

  • 所以我目前正在努力开发一个应用程序,需要一个谷歌地图API。每当我尝试加载地图时,我的应用程序将我的地图实现为片段类的子类: 编辑:原来我只是错过了应该被引用的API键。我很抱歉提出了一个低质量的问题