2016-01-08 51 views
2

我試圖運行mapsforge項目中最簡單的地圖查看器的示例: A very basic Android app example - GitHub with Android Studio。
在應用程序運行,我encoutering一個問題 - 地圖未呈現:http://i.stack.imgur.com/bVNUZ.jpg
沒有從我的logcat消息:Mapforge最簡單的地圖查看器 - 地圖不以默認主題呈現

01-08 15:46:45.273 32331-32359/com.maptests.mapsforgetest E/DatabaseRenderer: Error to retrieve render theme from future 
java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: com.caverock.androidsvg.SVG 
at java.util.concurrent.FutureTask.report(FutureTask.java:93) 
at java.util.concurrent.FutureTask.get(FutureTask.java:163) 
at org.mapsforge.map.layer.renderer.DatabaseRenderer.executeJob(DatabaseRenderer.java:124) 
at org.mapsforge.map.layer.renderer.MapWorkerPool$MapWorker.run(MapWorkerPool.java:121) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 
Caused by: java.lang.NoClassDefFoundError: com.caverock.androidsvg.SVG 
at org.mapsforge.map.android.graphics.AndroidSvgBitmap.getResourceBitmap(AndroidSvgBitmap.java:49) 
at org.mapsforge.map.android.graphics.AndroidSvgBitmap.<init>(AndroidSvgBitmap.java:107) 
at org.mapsforge.map.android.graphics.AndroidGraphicFactory.renderSvg(AndroidGraphicFactory.java:302) 
at org.mapsforge.map.rendertheme.XmlUtils.createBitmap(XmlUtils.java:64) 
at org.mapsforge.map.rendertheme.renderinstruction.RenderInstruction.createBitmap(RenderInstruction.java:131) 
at org.mapsforge.map.rendertheme.renderinstruction.Symbol.getBitmap(Symbol.java:62) 
at org.mapsforge.map.rendertheme.renderinstruction.Caption.<init>(Caption.java:96) 
at org.mapsforge.map.rendertheme.rule.RenderThemeHandler.startElement(RenderThemeHandler.java:186) 
at org.mapsforge.map.rendertheme.rule.RenderThemeHandler.processRenderTheme(RenderThemeHandler.java:107) 
at org.mapsforge.map.rendertheme.rule.RenderThemeHandler.getRenderTheme(RenderThemeHandler.java:67) 
at org.mapsforge.map.rendertheme.rule.RenderThemeFuture$RenderThemeCallable.call(RenderThemeFuture.java:60) 
at org.mapsforge.map.rendertheme.rule.RenderThemeFuture$RenderThemeCallable.call(RenderThemeFuture.java:43) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at java.lang.Thread.run(Thread.java:841)  

主要活動代碼(幾乎沒有改變,只是比較oryginal本質的變化代碼):

package com.maptests.mapsforgetest; 
import java.io.File; 
import org.mapsforge.core.model.LatLong; 
import org.mapsforge.map.android.graphics.AndroidGraphicFactory; 
import org.mapsforge.map.android.util.AndroidUtil; 
import org.mapsforge.map.android.view.MapView; 
import org.mapsforge.map.layer.cache.TileCache; 
import org.mapsforge.map.layer.renderer.TileRendererLayer; 
import org.mapsforge.map.datastore.MapDataStore; 
import org.mapsforge.map.reader.MapFile; 
import org.mapsforge.map.rendertheme.InternalRenderTheme; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.os.Environment; 

public class MainActivity extends AppCompatActivity { 
    // name of the map file in the external storage 
    private static final String MAPFILE = "germany.map"; 
    private MapView mapView; 
    private TileCache tileCache; 
    private TileRendererLayer tileRendererLayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     AndroidGraphicFactory.createInstance(this.getApplication()); 
     this.mapView = new MapView(this); 
     setContentView(this.mapView); 
     this.mapView.setClickable(true); 
     this.mapView.getMapScaleBar().setVisible(true); 
     this.mapView.setBuiltInZoomControls(true); 
     this.mapView.getMapZoomControls().setZoomLevelMin((byte) 10); 
     this.mapView.getMapZoomControls().setZoomLevelMax((byte) 20); 
     // create a tile cache of suitable size 
     this.tileCache = AndroidUtil.createTileCache(this, "mapcache", 
       mapView.getModel().displayModel.getTileSize(), 1f, 
       this.mapView.getModel().frameBufferModel.getOverdrawFactor()); 
    } 
    @Override 
    protected void onStart() { 
     super.onStart(); 
     this.mapView.getModel().mapViewPosition.setCenter(new LatLong(52.229081, 21.068434)); 
     this.mapView.getModel().mapViewPosition.setZoomLevel((byte) 12); 
     // tile renderer layer using internal render theme 
     MapDataStore mapDataStore = new MapFile(getMapFile()); 
     this.tileRendererLayer = new TileRendererLayer(tileCache, mapDataStore, 
       this.mapView.getModel().mapViewPosition, false, true, AndroidGraphicFactory.INSTANCE); 
     tileRendererLayer.setXmlRenderTheme(InternalRenderTheme.OSMARENDER); 
     // only once a layer is associated with a mapView the rendering starts 
     this.mapView.getLayerManager().getLayers().add(tileRendererLayer); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     this.mapView.destroyAll(); 
    } 

    private File getMapFile() { 
     File file = new File(Environment.getExternalStorageDirectory(), MAPFILE); 
     return file; 
    } 
} 

我的XML設計文件中:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.maptests.mapsforgetest.MainActivity"> 

    <org.mapsforge.map.android.view.MapView 
     android:id="@+id/mapView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</RelativeLayout> 

我覺得我還添加了所有所需的.jar-S:
mapsforge核-0.6.0.jar,
mapsforge-MAP-0.6.0.jar,
mapsforge-地圖的Android,
mapsforge -map-awt-0.6.0.jar,
mapsforge-map-reader-0.6.0.jar。

是否還有其他我應該添加的庫?

根據logcat和我讀到的信息,默認地圖主題有問題,我該如何解決這個問題?

回答

1

Cichocki,它發生在我身上也因此,讓我們開始是它缺少從圖書館mapsforge 0.6,這和其他的那類,你需要下載這個源代碼這是一個庫SVG: https://github.com/senkir/androidsvg 下載回購,進口到你的工作區並添加到你的項目中,我在eclipse中做了它,添加爲庫,並運行該代碼不需要額外添加任何東西,你應該看到地圖,祝你好運