2012-04-17 64 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