2010-09-01 15 views
36

Tengo una aplicación que tiene 11 actividades diferentes. Una de estas actividades es una extensión de MapActivity (es un mapa para la visualización de datos). Para llegar a esta actividad, el usuario debe primero viajar a través de la actividad de lanzamiento, luego otras 3 actividades. El código para poner en marcha el MapActivity es:No se puede resolver la clase MapActivity en Android

Intent i = new Intent(getBaseContext(), MapVis.class); 
i.putExtra("edu.uml.cs.isense.visualizations.session_list", sessions); 
startActivity(i); 

Cuando se ejecuta esto me da la siguiente salida del registro de:

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} 

que tienen el objetivo fijado a las API de Google, esta es una aplicación significado para Android 1.5, y especifica que el minsdk es el nivel 3 en el archivo de manifiesto. uses-library para mapas también está en el archivo de manifiesto.

<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> 

He estado en esto durante casi 2 días sin resultados. Parece que hay muchas personas que tienen problemas para lanzar MapActivity desde otras actividades, pero no hay soluciones en ningún lado. ¿Alguien tiene una pista? Gracias.

+0

cheque esta solución http://stackoverflow.com/a/7644635/779408 – breceivemail

Respuesta

16

Al parecer, en algún momento mi entorno de construcción se puso realmente en mal estado. Parece que de alguna manera tuve el jar API de Google en mi proyecto dos veces, causando un conflicto. Eliminé el proyecto y lo recreé, funciona ahora.

+3

¿Sabe usted que si usted sabe aceptar su propia respuesta que se obtiene el distintivo “Ser alumno”? Ya obtuviste los tres votos necesarios. – Martin

+0

Lo mismo. Añadí manualmente los mapas de Google a la ruta de compilación nuevamente después de que Eclipse me lo pidiera. Después de volver a crear algunas veces y no funcionaba, seguí las instrucciones de @ cyber-monk y eliminé el jar de mapas de la compilación. Funcionó muy bien después. – frostymarvelous

2

Tuve el mismo problema y me di cuenta de que no puedes simplemente agregar la biblioteca de mapas al proyecto, tienes que cambiar el objetivo a algo como este target=Google Inc.:Google APIs:8 en lugar de android=android-8.

De todos modos, gracias que me dio la pista para descubrirlo;)

2

intente esto:

en su Android .jar clic derecho Construir Path-> Configurar Build Path. a continuación, si ves 2 maps.jar incluye eliminar uno de ellos ...

+0

Es cierto, esto también me pasó cuando agregué el soporte de Google Maps a un proyecto existente. Si primero agregas el código y aceptas cuando Eclipse te dice que incluyas maps.jar, y luego cambias el objetivo de compilación, terminas con 2 maps.jar en tu build-path. – Roalt

65

El problema es que su clase MapVis es probable extendiendo com.google.android.maps.MapActivity. Para que el sistema pueda encontrar esta clase, debe hacer dos cosas:

Primero asegúrese de que su proyecto incluya el Android maps.jar en su ruta de compilación. De Eclipse find

Project > Properties > Android 

A continuación, seleccione una de las "Google API" según corresponda para su aplicación. Puede confirmar que maps.jar está en su ruta de compilación de comprobación:

Project > Properties > Java Build Path > Libraries > Expand "Google Apis" 

Segunda exploración para el archivo de manifiesto y asegúrese de que tiene el fragmento uses-library anidado dentro de las etiquetas <application> de la siguiente manera:

<manifest> 
... 
    <application ...> 
     <uses-library android:name="com.google.android.maps" /> 
     ... 
    </application> 
</manifest> 

¡Que la fuerza te acompañe!

+1

aparentemente en 'Proyecto> Propiedades> Android' seleccionando' google api' significa que también estás seleccionando la biblioteca de Android. Grr! – gideon

+7

"" asegúrese de tener el fragmento uses-library anidado dentro de las etiquetas "" ¡un protector de la vida real, gracias! – radhoo

+3

¡Salvaste mi vida! No agregué '' en mi manifiesto :) – Climbatize

1

Estaba teniendo el mismo problema e intenté todas las soluciones propuestas anteriormente (excepto la reconstrucción del proyecto) sin éxito. Luego limpié el proyecto y lo arreglaron. En Eclipse Project> Clean, verifique su proyecto y seleccione Aceptar.

+0

tenía el mismo problema y un simple proyecto limpio hizo el truco, gracias! – pbojinov

2

La respuesta de John funcionó para mí. Me llevó mucho tiempo encontrar esta solución.Una gran página para trabajar con MapActivity es here. Cubre la mayoría de los problemas encontrados al trabajar con él, incluida la solución que tenía John.

13

Tuve exactamente el mismo problema.

Estaba agregando el maps.jar manualmente en la ruta de compilación y usando Android 2.1 como objetivo. Esto no parece funcionar (no en 2.1 de todos modos) a pesar del tutorial que seguí diciendo para hacerlo así.

cómo resolví que era:

-Eliminar el maps.jar añadido manualmente a continuación, puse mi destino de generación a las API de Google 2.1 en lugar de Android 2.1

me di cuenta después de que el maps.jar se incluye automáticamente en las libs de Android "Google", por lo que entraba en conflicto. : D

+0

perfecto que era mi problema :) –

0

@ cyber-monk's (lo siento, no puedo comentar sobre las respuestas aún) la respuesta es similar a todas las demás respuestas en Internet, excepto que muestra un detalle muy importante que la mayoría omite. Tienes que poner la etiqueta dentro de la etiqueta. La mayoría solo dice ponerlo en el manifiesto sin decir DONDE ponerlo. Lo puse en el interior y, finalmente, finalmente lo puso a funcionar

5

Actualizo la respuesta de cyber-monk porque el problema no es que no tenga maps.jar, el problema es que tiene un contenedor conflictivo (por ejemplo, mezcla los mapas. jar con Android 4.0). Así

  1. asegurar que API de Google se comprueba en Project > Properties > Android. Si ese no es el caso, selecciónelo y haga clic en aplicar. Este cambio modificará la propiedad de destino en el archivo project.properties y cambiará las bibliotecas incluidas. (Por ejemplo con el último SDK de Android, tendrá: target=Google Inc.:Google APIs:14)
  2. ir a Project > Properties > Java Build Path > Libraries y asegurarse de que no hay android.jar o maps.jar directamente incluido. Solo debe tener Google Apis con al menos maps.jar y android.jar como hojas.
1

en mi caso, resultó que el maps.jar también estaba en mi directorio libs. Eliminarlo solucionó el problema.

0

Otra razón más probable que resultó fue el hecho de que había libs conflictivas, por lo que resulta en esos problemas ClassLoading, es bueno eliminar las otras libreras innecesarias. Si ha incluido la Lib de Google Maps tal como lo sugirieron los colaboradores anteriores, elimínelos, para que su proyecto tenga el siguiente aspecto.

enter image description here

enter image description here

Otra posible causa es la declaración del paquete en su manifiesto. enter image description here

3

Para aquellos que están usando estudio Android y Gradle:

  1. eliminar completamente maps.jar (y cualesquiera otras librerías adicionales para google maps) de dependencias.
  2. En sus proyectos y se manifiestan en sus mapas-biblioteca (si está utilizando uno) Módulo de añadir esta línea en la sección 'aplicación':

    < utiliza la biblioteca-android: name = "com.google.android. mapas"/>

  3. en sus proyectos build.gradle archivo (y también en los mapas de la biblioteca Gradle Si está utilizando uno) modificar compileSdkVersion:

    compileSdkVersion "Google Inc.:Google API: 19"

  4. Limpia y reconstruye tu proyecto.

Cuestiones relacionadas