2014-02-13 76 views
0

我正在嘗試使用Osmdroid和Osmdroidbonuspack編寫一個簡單的Android應用程序,但是我的問題已經超過了第一階段,下面是他們教程中的基本示例。無法使用OSMBonusPack庫解析KML文件

我能夠使用osmdroid顯示地圖,但是當我嘗試使用osmdroidbonuspack解析url時,解析器總是返回false。

我使用的URL是「巴黎之旅」一本教程: http://code.google.com/p/osmbonuspack/wiki/Tutorial_3

,我知道存在該文件作爲鏈接的作品。

在我的主要活動的代碼是:

mMapView = (MapView) findViewById(R.id.mapview); 
    mMapView.setTileSource(TileSourceFactory.MAPNIK); 
    mMapView.setBuiltInZoomControls(true); 
    mMapController = (MapController) mMapView.getController(); 
    mMapController.setZoom(2); 

    KmlDocument kmlDocument = new KmlDocument(); 
    boolean ok = kmlDocument.parseUrl("http://mapsengine.google.com/map/kml?mid=z6IJfj90QEd4.kUUY9FoHFRdE"); 

我要補充,我注意到一些logcat中聯網相關的錯誤:

02-13 23:28:28.177: W/System.err(1652): android.os.NetworkOnMainThreadException 
02-13 23:28:28.181: W/System.err(1652):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
02-13 23:28:28.181: W/System.err(1652):  at  java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
02-13 23:28:28.185: W/System.err(1652):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
02-13 23:28:28.185: W/System.err(1652):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
02-13 23:28:28.185: W/System.err(1652):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
02-13 23:28:28.185: W/System.err(1652):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
02-13 23:28:28.189: W/System.err(1652):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
02-13 23:28:28.189: W/System.err(1652):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
02-13 23:28:28.189: W/System.err(1652):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
02-13 23:28:28.193: W/System.err(1652):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
02-13 23:28:28.193: W/System.err(1652):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
02-13 23:28:28.193: W/System.err(1652):  at org.osmdroid.bonuspack.utils.HttpConnection.doGet(HttpConnection.java:75) 
02-13 23:28:28.197: W/System.err(1652):  at org.osmdroid.bonuspack.kml.KmlDocument.parseUrl(KmlDocument.java:231) 
02-13 23:28:28.197: W/System.err(1652):  at com.example.testosmdroid.MainActivity.onCreate(MainActivity.java:29) 
02-13 23:28:28.197: W/System.err(1652):  at android.app.Activity.performCreate(Activity.java:5008) 
02-13 23:28:28.197: W/System.err(1652):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
02-13 23:28:28.201: W/System.err(1652):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
02-13 23:28:28.201: W/System.err(1652):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
02-13 23:28:28.201: W/System.err(1652):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
02-13 23:28:28.201: W/System.err(1652):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
02-13 23:28:28.205: W/System.err(1652):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-13 23:28:28.205: W/System.err(1652):  at android.os.Looper.loop(Looper.java:137) 
02-13 23:28:28.205: W/System.err(1652):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-13 23:28:28.209: W/System.err(1652):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-13 23:28:28.209: W/System.err(1652):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-13 23:28:28.209: W/System.err(1652):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-13 23:28:28.213: W/System.err(1652):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-13 23:28:28.213: W/System.err(1652):  at dalvik.system.NativeStart.main(Native Method) 

在MainActivity誤差在的parseURL線發生。 當我看到這個我想這可能是由於權限問題,但我只是檢查,似乎我擁有所有必需的權限,至少根據這個教程:http://code.google.com/p/osmdroid/wiki/Prerequisites

我AndroidManifest低於:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="19" /> 

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.testosmdroid.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

回答

0

下車,回去和閱讀一些文檔,我已經回答了我自己的追求離子。從他們的其他教程之一:

爲了清晰和簡潔,在這些教程中,我們在主線程中執行所有API調用。

通常,對於網絡調用,完全不推薦:我們應該使用線程和異步任務。甚至最糟糕的是,自從Honeycomb SDK(3.0)以來,它不允許在主線程中進行網絡調用(感謝「StrictMode.ThreadPolicy」默認設置,將引發NetworkOnMainThreadException異常)。

所以: 對於這些教程,目標的SDK早於3.0 一旦你使用了與TUTOS,並希望在你的真正的應用程序的工作,看看在OSMBonusPackDemo源代碼,其中網絡調用是異步完成任務。

按照他們的建議,現在它解析正確。