2012-04-17 81 views
0

我想爲項目使用OSMdroid,並且我完全無法使最簡單的代碼工作。 好吧,幾天前我能夠顯示地圖等,現在我甚至不能實例化一個MapView。 我將代碼縮減爲其sipmlest形式。 我使用eclipse工作。我下載osmdroid-Android的3.0.5.jar和SLF4J-Android的1.5.8.jar,我通過增加線到classpath文件不可能實例化一個OsmDroid MapView

<classpathentry kind="lib" path="lib/osmdroid-android-3.0.5.jar"/> 
<classpathentry kind="lib" path="lib/slf4j-android-1.5.8.jar"/> 

或者通過右鍵點擊他們,那麼他們包含在項目構建路徑 - >添加到構建路徑(既給了相同的結果,無論如何)

然後我輸入驗證碼

import android.app.Activity; 
import org.osmdroid.tileprovider.tilesource.TileSourceFactory; 
import org.osmdroid.util.GeoPoint; 
import org.osmdroid.views.MapController; 
import org.osmdroid.views.MapView; 

import android.os.Bundle; 

public class TestMapActivity extends Activity { 
/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MapView mv=new MapView(this,256); 

    } 
} 

而且在模擬器上運行它時,我得到了一個錯誤:

04-17 09:10:31.181: E/AndroidRuntime(595): FATAL EXCEPTION: main 
04-17 09:10:31.181: E/AndroidRuntime(595): java.lang.NoClassDefFoundError:   org.osmdroid.views.MapView 
04-17 09:10:31.181: E/AndroidRuntime(595): at  testmap.sagem.TestMapActivity.onCreate(TestMapActivity.java:17) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.Activity.performCreate(Activity.java:4465) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.os.Looper.loop(Looper.java:137) 
04-17 09:10:31.181: E/AndroidRuntime(595): at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-17 09:10:31.181: E/AndroidRuntime(595): at java.lang.reflect.Method.invokeNative(Native Method) 
04-17 09:10:31.181: E/AndroidRuntime(595): at java.lang.reflect.Method.invoke(Method.java:511) 
04-17 09:10:31.181: E/AndroidRuntime(595): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-17 09:10:31.181: E/AndroidRuntime(595): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-17 09:10:31.181: E/AndroidRuntime(595): at dalvik.system.NativeStart.main(Native Method) 

當我註釋掉「MapView mv = new MapView(this,256);」它的工作原理,所以我不明白爲什麼mapview不能實例化。

對此有何想法?

感謝您的關注。

編輯: 的AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="testmap.sagem" 
android:versionCode="1" 
android:versionName="1.0" > 
<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" /> 
<uses-sdk android:minSdkVersion="15" /> 
<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".TestMapActivity" 
     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> 
</manifest> 

main.xml中的文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 
</LinearLayout> 

回答

2

將文件夾名稱「lib」更改爲「libs」,並將所有jar文件放在該文件夾中,然後將jar文件的路徑充電到「libs」文件夾。我不確定,但我認爲它會起作用。

+1

Ooooh。上帝祝福你。我不認爲這會起作用,但確實如此。 – 2012-04-17 10:55:09

+0

這不適合我。 – 2012-05-28 17:38:41

1

嘗試使用3.0.7和清理項目。 讓我知道。 http://code.google.com/p/osmdroid/downloads/list

+0

嗯,我試過了,但我有同樣的錯誤。我也試過用slf4j-android-1.6.1-RC1.jar代替1.5.8,但是同樣的bug – 2012-04-17 09:38:11

+0

通過檢查這個線程:http://stackoverflow.com/questions/9135284/cannot-access-resource -icons-when-running-with-osmdroid-android-3-0-7 我可以建議使用這個:[link to jar](https://oss.sonatype.org/content/groups/public/org /osmdroid/osmdroid-android/3.0.8-SNAPSHOT/osmdroid-android-3.0.8-20120208.220818-1.jar) – N3sh 2012-04-17 09:43:08

+0

你還可以添加xml文件嗎? – N3sh 2012-04-17 09:48:37