Osmdroid(android 25):显示离线Mapsforge文件给出错误:java.lang.NoSuchFieldError:No field DEBUG_TILE_PROVIDERS

时间:2017-12-26 11:59:53

标签: android osmdroid

在步骤1中,在读取/写入外部资源的Manifest.xml和Runtime权限之后显示在线MAPNIK映射。

下一步,我想使用Osmdroid显示离线Mapsforge文件的地图。上下文是Android 25.

您能否建议我使用Osmdroid,Osmbonuspack和Mapsforge的良好版本组合?

以下代码用于显示离线Mapsforge文件。完整示例位于Github project。 1用于选择文件的文件,1个用于显示文件的文件。

private void showMapsforgeFile( File mapFile) {
    File[] files = new File[1];
    files[0] = mapFile;
    MapsForgeTileSource.createInstance( this.getApplication());
    fromFiles = MapsForgeTileSource.createFromFiles( files);
    forge = new MapsForgeTileProvider( new SimpleRegisterReceiver( getBaseContext()), fromFiles);
    mapView.setTileProvider(forge);
    mapView.getController().setZoom( 9);
    GeoPoint startPoint = new GeoPoint(52.2222, 36.6123);
}

这给(通常)下一条消息:

  

I / OsmDroid:下载磁贴时出错:/ 9/55/139               java.lang.NoSuchFieldError:类中没有类型为Z的字段DEBUG_TILE_PROVIDERS   Lorg / osmdroid / tileprovider /常数/ OpenStreetMapTileProviderConstants ;   或其超类等

我尝试了很多Osmdroid,Osmdroid和Mapsforge版本的组合。例如(我使用了很多其他组合......如jitpack.io,osmdroid release和osmbonuspack release所示。错误保持不变。

compile 'com.github.MKergall:osmbonuspack:6.1'
compile 'org.apache.commons:commons-lang3:3.3.2'
compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'org.osmdroid:osmdroid-android:5.5'
compile 'org.osmdroid:osmdroid-mapsforge:5.5:release@aar'
compile 'org.mapsforge:mapsforge-map-android:0.6.1'
compile 'org.mapsforge:mapsforge-map:0.6.1'

1 个答案:

答案 0 :(得分:1)

正如github上提到的,你的osmdroid库版本不匹配。将它们全部设置为相同的版本,你应该很高兴。违规参考:osmdroid-mapsforge

https://github.com/johan974/osmdroid-mapsforge-demo/blob/master/app/build.gradle#L34

编辑:

这是工作配置 compile 'org.osmdroid:osmdroid-android:5.6.5' compile 'org.osmdroid:osmdroid-mapsforge:5.6.5' compile 'org.mapsforge:mapsforge-map-android:0.6.1' compile 'org.mapsforge:mapsforge-map:0.6.1' 请注意,它将记录与渲染主题相关的错误消息,但它将呈现

还有一些小的api差异,我修复了你的项目分叉并开了一个pr。