Android Studio集成Mapbox出现白屏崩溃问题求助
解决Mapbox集成白屏崩溃问题
从你的崩溃日志里一眼就揪出了核心问题:java.lang.ClassNotFoundException: 未找到类"com.mapbox.mapboxsdk.maps.Mapview"——注意这里的类名是小写的v,而Mapbox官方的正确类名是MapView(大写V),这就是XML解析时找不到类、直接导致崩溃的元凶。
第一步:修复XML布局的类名拼写错误
把布局里的com.mapbox.mapboxsdk.maps.Mapview改成com.mapbox.mapboxsdk.maps.MapView,修正后的完整布局代码:
<com.mapbox.mapboxsdk.maps.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent" mapbox:mapbox_cameraTargetLat="6.641183" mapbox:mapbox_cameraTargetLng="46.7784736" mapbox:mapbox_styleUrl="mapbox://styles/mapbox/streets-v10" mapbox:mapbox_cameraZoom="12" />
第二步:修正Java代码里的冗余错误
你的Java代码还有几个小问题,也可能影响地图正常加载,一起调整:
- 重复实现了
onMapReady方法:一个是getMapAsync的内部回调,另一个是Activity的重写方法,后者完全多余,直接删掉即可。 - 代码里有一行注释掉的
setContentView(R.layout.activity_map);,确保你当前使用的activity_main布局确实包含了上面修正后的MapView。 - 崩溃日志显示启动的是
MainActivity,但你的类名是MapActivity,要保持一致:要么在AndroidManifest里把启动Activity改成MapActivity,要么把MapActivity的逻辑移到MainActivity中。
修正后的Java代码示例:
public class MapActivity extends AppCompatActivity { private MapView mapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Mapbox.getInstance(this, "pk.eyJ1IjoidGlyYWlubyIsImEiOiJja2F6Y3ZyejQwaWJ6MnJtaWdmcmU3cjV5In0.5_0xHC_VyQUgyvUQ8IVNfA"); setContentView(R.layout.activity_main); mapView = findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); mapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(@NonNull MapboxMap mapboxMap) { mapboxMap.setStyle(Style.MAPBOX_STREETS, new Style.OnStyleLoaded() { @Override public void onStyleLoaded(@NonNull Style style) { // Map is set up and the style has loaded. Now you can add data or make other map adjustments. } }); } }); } @Override public void onStart() { super.onStart(); mapView.onStart(); } @Override public void onResume() { super.onResume(); mapView.onResume(); } @Override public void onPause() { super.onPause(); mapView.onPause(); } @Override public void onStop() { super.onStop(); mapView.onStop(); } @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } }
第三步:验证依赖配置
最后确认你Module级别的build.gradle里正确引入了Mapbox依赖,比如:
dependencies { implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.6.1' // 替换成你使用的对应版本 }
做完这些修改后,先清理项目(Build -> Clean Project)再重新运行,应该就能正常加载地图了。
内容的提问来源于stack exchange,提问作者Adriano Vieux
相关产品推荐
相关产品推荐

