Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
136 views
in Technique[技术] by (71.8m points)

Cannot resolve MapActivity class on 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...