首页 > 解决方案 > Android Studio中的Mapbox黑屏

问题描述

我正在尝试使用 Mapbox 在 android studio 中制作地图应用程序,它曾经可以工作,但现在只显示一个空白屏幕。

我一直在摆弄它,试图让它工作很长时间,但无济于事。我还有一个“找不到兼容的并排 NDK 版本”。默认是 20.0.5594570' 错误/警告我也不明白。任何帮助将不胜感激和 TIA。

MainActivity.java:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

private MapView mapView;
private MapboxMap map;

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

    Mapbox.getInstance(this, getString(R.string.access_token));
    setContentView(R.layout.activity_main);
    mapView = (MapView) findViewById(R.id.mapView);
    mapView.onCreate(savedInstanceState);

}

@SuppressWarnings("deprecation")
public void onMapReady(@NonNull MapboxMap mapboxMap) {
    map = mapboxMap;
    mapboxMap.setStyle(Style.OUTDOORS);

    mapboxMap.setCameraPosition(
            new CameraPosition.Builder()
                .target(new LatLng(53.472, -2.239))
                .zoom(8.0)
                .build());

    mapboxMap.addMarker(new MarkerOptions()
            .position(new LatLng(53.472, -2.239))
            .title("John Dalton"));
}

@Override
public void onStart() {
    super.onStart();
    mapView.onStart();
}

@Override
public void onResume() {
    super.onResume();
    mapView.onResume();
}

其余代码只是 onStop() 函数等。

build.gradle (:app):


android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.example.stationmapper"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    //Mapbox dependencies
    implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.0.0'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.8.0'
}

我认为这是足够的代码来确定和解决问题,但如果需要其他任何东西,我会编辑并提供它。

标签: javaandroidandroid-studioandroid-ndkmapbox

解决方案


你的活动实现OnMapReadyCallback了,但你在之后失踪mapView.getMapAsync(this)mapView.onCreate(savedInstanceState);

@Override public void onMapReady(@NonNull MapboxMap mapboxMap) {
  map = mapboxMap;
  mapboxMap.setStyle(Style.OUTDOORS, 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.

    }
  });
}

然后,在onStyleLoaded()回调区域添加标记。

与其使用已弃用的 addMarker(),不如考虑使用 Mapbox 的注释插件https://docs.mapbox.com/android/plugins/overview/annotationSymbolLayer源代码https://docs.mapbox.com/android/maps/overview /annotations/#source-and-layer


推荐阅读