无法parsingAndroid上的MapActivity类
我有一个应用程序,有11个不同的活动。 其中一项活动是MapActivity的扩展(这是一个数据可视化的地图)。 要进行这项活动,用户必须首先通过发起活动,然后再进行其他3个活动。 启动MapActivity的代码是:
Intent i = new Intent(getBaseContext(), MapVis.class); i.putExtra("edu.uml.cs.isense.visualizations.session_list", sessions); startActivity(i);
当这个被执行时,我从日志中得到以下输出:
09-01 14:36:22.389: WARN/dalvikvm(592): Class resolved by unexpected DEX: Ledu/uml/cs/isense/visualizations/MapVis;(0x44981910):0x128260 ref [Lcom/google/android/maps/MapActivity;] Lcom/google/android/maps/MapActivity;(0x44981910):0x13d330 09-01 14:36:22.389: WARN/dalvikvm(592): (Ledu/uml/cs/isense/visualizations/MapVis; had used a different Lcom/google/android/maps/MapActivity; during pre-verification) 09-01 14:36:22.389: WARN/dalvikvm(592): Unable to resolve superclass of Ledu/uml/cs/isense/visualizations/MapVis; (118) 09-01 14:36:22.389: WARN/dalvikvm(592): Link of class 'Ledu/uml/cs/isense/visualizations/MapVis;' failed 09-01 14:36:22.389: DEBUG/AndroidRuntime(592): Shutting down VM 09-01 14:36:22.389: WARN/dalvikvm(592): threadid=1: thread exiting with uncaught exception (group=0x4001d7f0) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): FATAL EXCEPTION: main 09-01 14:36:22.399: ERROR/AndroidRuntime(592): java.lang.NoClassDefFoundError: edu.uml.cs.isense.visualizations.MapVis 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at edu.uml.cs.isense.visualizations.Visualizations.onOptionsItemSelected(Visualizations.java:213) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at android.app.Activity.onMenuItemSelected(Activity.java:2195) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at android.view.View$PerformClick.run(View.java:8816) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at android.os.Handler.handleCallback(Handler.java:587) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at android.os.Handler.dispatchMessage(Handler.java:92) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at android.os.Looper.loop(Looper.java:123) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at android.app.ActivityThread.main(ActivityThread.java:4627) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at java.lang.reflect.Method.invokeNative(Native Method) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at java.lang.reflect.Method.invoke(Method.java:521) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at dalvik.system.NativeStart.main(Native Method) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at dalvik.system.DexFile.defineClass(Native Method) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:209) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:203) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 09-01 14:36:22.399: ERROR/AndroidRuntime(592): ... 17 more 09-01 14:36:22.409: WARN/ActivityManager(92): Force finishing activity edu.uml.cs.isense/.visualizations.Visualizations 09-01 14:36:22.909: WARN/ActivityManager(92): Activity pause timeout for HistoryRecord{44c84a90 edu.uml.cs.isense/.visualizations.Visualizations}
我确实将目标设置为Google API,这是针对Android 1.5的应用程序,并将清单文件中的minsdk指定为级别3。 用于地图的库也在清单文件中。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.uml.cs.isense" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Isense" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".experiments.Experiments" android:label="@string/app_name_experiments"/> <activity android:name=".sessions.Sessions" android:label="@string/app_name"/> <activity android:name=".people.People" android:label="@string/app_name_people"/> <activity android:name=".profile.Profile" android:label="@string/app_name"/> <activity android:name=".sensors.Sensors" android:label="@string/app_name_sensors"/> <activity android:name=".visualizations.DataTable" android:label="@string/app_name"/> <activity android:name=".visualizations.Visualizations" android:label="@string/app_name"/> <activity android:name=".sensors.DataListActivity" android:label="@string/selectFile" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden" /> <activity android:name=".sensors.Upload" android:label="@string/app_name_uploader"/> <activity android:name=".visualizations.MapVis" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" /> <uses-library android:name="com.google.android.maps"/> </application> <uses-sdk android:minSdkVersion="3"/> </manifest>
我已经在这个近2天了没有结果。 似乎有很多人在从其他活动中启动MapActivity时遇到问题,但是在任何地方都没有解决scheme。 有人有线索吗? 谢谢。
问题是你的MapVis类可能扩展com.google.android.maps.MapActivity 。 为了系统能够find这个类,你需要做两件事情:
首先确保您的项目在您的构buildpath中包含Android maps.jar 。 从Eclipsefind
Project > Properties > Android
然后select适合您的应用的“Google API”之一。 您可以通过检查以确认maps.jar在您的构buildpath上:
Project > Properties > Java Build Path > Libraries > Expand "Google Apis"
第二次浏览到你的清单文件,并确保你有嵌套在<application>
标签中的use uses-library
代码段,如下所示:
<manifest> ... <application ...> <uses-library android:name="com.google.android.maps" /> ... </application> </manifest>
愿原力与你同在!
显然在某个时候,我的构build环境真的搞砸了。 它看起来像我有两次在我的项目中的谷歌APIjar,导致冲突。 我删除了该项目并重新创build了它,现在就开始工作。
我有这个完全相同的问题。
我在构buildpath中手动添加maps.jar,并使用android 2.1作为目标。 这似乎并不工作(无论如何2.1)尽pipe教程我跟着说这样做。
我如何解决这个问题是:
– 删除手动添加的maps.jar,然后我将我的构build目标设置为Google API 2.1而不是Android 2.1
后来我意识到,maps.jar会自动包含在“Google”Android库中,因此存在冲突。 :d
我更新networking和尚的答案,因为问题不是你没有maps.jar,问题是你有冲突的jar(例如,你把androids.info和maps.jar混合在一起)。 所以
- 确保在“
Project > Properties > Android
检查Google API 。 如果不是这样的话,select它并点击应用。 此更改将修改文件project.properties中的目标属性,并更改包含的库 。 (例如使用最新的android sdk,您将拥有:target=Google Inc.:Google APIs:14
) - 转到
Project > Properties > Java Build Path > Libraries
并确保没有直接包含android.jar或maps.jar 。 您应该只将Google Apis至less包含maps.jar和android.jar作为叶子。
对于那些使用Android Studio和Gradle的人:
- 从依赖关系中彻底删除maps.jar(以及为google地图添加的任何其他库)。
-
在您的项目清单和您的地图库(如果您使用的)模块添加此行在“应用程序”部分:
<uses-library android:name =“com.google.android.maps”/>
-
在你的项目build.gradle文件(如果你正在使用一个地图库gradle)也可以修改compileSdkVersion:
compileSdkVersion“Google Inc.:Google API:19”
-
清理并重build您的项目。
我有同样的问题,我意识到你不能只是添加地图库的项目,你必须改变目标为这样的target=Google Inc.:Google APIs:8
而不是android=android-8
。
无论如何,谢谢你给我提示,发现它;)
尝试这个:
在你的Android .jar上右击Build Path-> Configure Build Path。 那么如果你看到2个maps.jar包括删除其中的一个…
约翰的回答为我工作。 我永远花了我的时间来find这个解决scheme。 在这里 ,使用MapActivity的一个很棒的页面。 它涵盖了使用它时遇到的大部分问题,包括John所提供的解决scheme。
我有同样的问题,并尝试了所有上述build议的解决scheme(重build项目除外)没有成功。 然后我清理了这个项目,并修复了它。 在Eclipse项目>清洁检查您的项目,并select确定。
在我的情况下,事实certificatemaps.jar也坐在我的libs目录中。 从中解决问题。
@networking和尚的(对不起,不能评论答案)答案是类似于互联网上的其他每个答案,只是它显示了一个非常重要的细节,最遗漏。 你必须把标签放在标签内。 大多数只是说,把它放在清单里,没有说在哪里放。 我把它放进去,最后终于把它运行起来了
原来的另一个最可能的原因是库存有冲突,所以导致这些ClassLoading问题,最好删除其他不需要的库。 如果你已经包含了以前的贡献者build议的谷歌地图库,然后做删除它们,以便您的项目现在看起来如下所示。
另一个可能的原因是您的清单上的包声明。