java - 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'
}
我认为这是足够的代码来确定和解决问题,但如果需要其他任何东西,我会编辑并提供它。
解决方案
你的活动实现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/annotation或SymbolLayer
源代码https://docs.mapbox.com/android/maps/overview /annotations/#source-and-layer
推荐阅读
- c++ - 我最近没有声明时无法生成默认构造函数
- c# - Azure 文件存储 - 复制时阻止
- javascript - 如何在打字稿中动态创建输入类型文本
- qt - 使用专有编解码器构建 QtWebEngine 5.9.1
- python - 在 Ubuntu 18.04 上安装 OpenCV 3.4.2
- python - 抓取修改后的文件名python
- python - Python3 TypeError:采用 1 个位置参数,但给出了 2 个
- javascript - 使用 JS 添加选择>选项作为列表项
- android - android推送通知不起作用appcelerator
- r - 如果扫描被转义,则使用默认值