Estoy usando Android Studio para mi aplicación de Android.
Mi código funciona y compila.
Recientemente, el IDE me muestra un error (líneas rojas) en getClass del siguiente código:
fragment.getClass().getSimpleName()
Pero aún así la aplicación se compila y se ejecuta.
El error es:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
¿Alguien puede explicarme de qué se trata? ¿Y por qué el código sigue ejecutándose?
android
android-studio
NickF
fuente
fuente
Respuestas:
Creo que es un error en Android Studio. Como sabemos, Android Studio se basa en la plataforma IntelliJ y la funcionalidad existente de IntelliJ IDEA Community Edition.
Google lo ha desarrollado en cooperación con JetBrains. Y se informa que el mismo error también ocurre en IntelliJ. Echa un vistazo al informe de errores
La única solución a este problema es emitir la instancia a la que llama
getClass()
, de laObject
siguiente manera:fuente
En lugar de modificar el código de su aplicación, puede evitar este error parcheando el código fuente de su SDK de Android.
Cuando encuentre el error getClass (), vaya a la declaración del método (⌘B en Mac). Esto navegará a una ruta como
$ANDROID_HOME/sources/android-20/java/lang/Object.java
. Ahora, dentro de IntelliJ o Android Studio:Object.java
escribible eligiendoFile -> Make File Writable
. Es posible que se le solicite que haga esto automáticamente si intenta editar el archivo.Elimine el comodín ilimitado:
// Se eliminó el comodín ilimitado (Clase) para evitar http://youtrack.jetbrains.com/issue/IDEA-72835 public final native Class getClass ();
Las versiones más recientes de Android Studio parecen sufrir un error que le impide editar el archivo incluso después de declararlo como editable. En su lugar, copie la ruta
Edit -> Copy Path
o ⇧⌘C y edítela en su editor favorito.Este cambio preservará la funcionalidad de navegación de origen. Otras opciones:
getClass()
declaración completa .Object.java
archivo, por ejemploObject.java.in
.fuente
Object.java
ser editado incluso después de borrar la marca de solo lectura.instance.getClass()
(sologetClass()
funciona). CambiarObject.java
el nombre del archivo para deshabilitarlo funciona.Transmita su "getClass" a un Objeto, use
Para aquellos que tienen este problema con fragmentos, use
fuente
En primer lugar, el problema relacionado con Android Studio está aquí . ¡Marque con una estrella para que pueda llamar la atención!
También el problema relacionado con IntelliJ está aquí .
Una buena solución para esto es cambiar el nombre
<sdk>/android-<platform>/java/lang/Object.java
a,Object.java.XXX
por ejemplo. Esto evitará que AS lo vea y se evitará el problema. Por supuesto, al hacer esto, ya no puede navegar fácilmente a la fuente del Objeto desde AS.Puede cambiar el nombre del archivo a su nombre original cuando se solucione este error ...
fuente
Hoy me encontré con el mismo problema cuando creé un nuevo proyecto. Comparé con otro proyecto que no tenía este problema y encontré una diferencia. El antiguo proyecto se creó con "Android 4.2.2", mientras que el nuevo se configuró de forma predeterminada en "Plataforma Android API 19". Cambié eso a "Android 4.2.2" que equivale a API 17 y el marcador de error rojo desapareció. API 17 es suficiente para mi proyecto, así que puedo dejarlo de esta manera. No tengo idea de por qué esto resuelve el problema, para ser honesto.
fuente
Encontré una solución para esto, al menos por mi parte. Definitivamente es un error de IntelliJ, pero parece ser causado por un conflicto entre las clases en sourcepath y classpath para el SDK de Android.
Si va a Estructura del proyecto> SDK> {{Su SDK de Android}}, elimine las entradas de Android de la pestaña Sourcepath. El problema con esta solución es que ya no tiene acceso directo a las fuentes desde IntelliJ / Android Studio.
He publicado la misma información en el rastreador de problemas de Jetbrains , así que espero ver una solución pronto.
fuente
Simplemente use fragment.class.getSimpleName ();
fuente