I have an application which has 11 different activities. One of these activities is an extension of MapActivity (it is a map for data visualization). To get to this activity the user must first travel through the launch activity, then 3 other activities. The code to launch the MapActivity is:
Intent i = new Intent(getBaseContext(), MapVis.class); i.putExtra("edu.uml.cs.isense.visualizations.session_list", sessions); startActivity(i);
When this is executed I get the following output from the Log:
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}
I do have the target set to Google APIs, this is an app meant for Android 1.5, and specifies the minsdk to be level 3 in the manifest file. uses-library for maps is also in manifest file.
<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>
I have been at this for almost 2 days now with no results. It seems that there are a lot of people having issues launching a MapActivity from other activities but there are no solutions anywhere. Does anyone have a clue? Thanks.
The problem is that your MapVis class is likely extending com.google.android.maps.MapActivity. For the system to be able to find this class you need to do two things:
First make sure your project is including the Android maps.jar in your build path. From Eclipse find
Project > Properties > Android
Then select one of the "Google APIs" as appropriate for you app. You can confirm that maps.jar is on your build path by checking:
Project > Properties > Java Build Path > Libraries > Expand "Google Apis"
Second browse to your manifest file and make sure you have the uses-library
snippet nested within the <application>
tags as follows:
<manifest> ... <application ...> <uses-library android:name="com.google.android.maps" /> ... </application> </manifest>
May the force be with you!
Apparently at some point my build environment got really messed up. It looked like I somehow had the google APIs jar in my project twice, causing a conflict. I deleted the project and recreated it, works now.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With