Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot resolve MapActivity class on Android

Tags:

android

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.

like image 397
John Avatar asked Sep 01 '10 18:09

John


2 Answers

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!

like image 152
cyber-monk Avatar answered Oct 01 '22 14:10

cyber-monk


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.

like image 33
John Avatar answered Oct 01 '22 13:10

John