Stradtdog
Tengo un problema con mi aplicación que cuando inicio sesión, la aplicación falla y aparece el error:
java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.runtime/javalib/core-oj.jar)
at okhttp3.internal.Util.<clinit>(Util.java:87)
at okhttp3.internal.Util.skipLeadingAsciiWhitespace(Util.java:321)
at okhttp3.HttpUrl$Builder.parse(HttpUrl.java:1313)
at okhttp3.HttpUrl.get(HttpUrl.java:917)
at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:492)
at com.example.usub.Remote.RetrofitClient.getClient(RetrofitClient.java:14)
at com.example.usub.Common.Common.getGoogleAPI(Common.java:10)
at com.example.usub.Welcome.onCreate(Welcome.java:208)
at android.app.Activity.performCreate(Activity.java:7825)
at android.app.Activity.performCreate(Activity.java:7814)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
He intentado meterme con el gradle y cambiar las variables. El problema parece provenir de este paquete:
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseURL)
{
if(retrofit == null)
{
retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
}
return retrofit;
}
}
Luego da a otra referencia a:
import com.example.usub.Remote.IGoogleAPI;
import com.example.usub.Remote.RetrofitClient;
public class Common {
public static final String baseURL = "https://maps.googleapis.com";
public static IGoogleAPI getGoogleAPI()
{
return RetrofitClient.getClient(baseURL).create(IGoogleAPI.class);
}
}
Aquí está mi gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.example.usub"
minSdkVersion 26
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0-alpha01'
implementation 'com.firebase:geofire-android:2.1.2'
implementation 'com.github.kmenager:material-animated-switch:1.2.2'
implementation 'com.squareup.retrofit2:retrofit:2.7.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.7.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.firebase:firebase-database:19.2.0'
implementation 'com.google.firebase:firebase-auth:19.2.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.github.d-max:spots-dialog:0.7@aar'
implementation "androidx.cardview:cardview:1.0.0"
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation 'com.rengwuxian.materialedittext:library:2.1.4'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
//implementation 'com.google.android.gms:play-services:17.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.google.firebase:firebase-analytics:17.2.1'
implementation 'com.google.android.gms:play-services-location:17.0.0'
}
apply plugin: 'com.google.gms.google-services'
¿Cómo puedo encontrar el método para corregir el error?
Martín Zeitler
Intente cambiar al modo de compatibilidad de Java 8, para eliminar el azúcar de alguna biblioteca:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
Además, la API JSON de Google podría necesitar la GsonConverterFactory
.
-
Según la documentación square.github.io/okhttp/upgrading_to_okhttp_4 también se recomienda agregar android { kotlinOptions { jvmTarget = “1.8” } }
– Mijaíl Sharin
20 de marzo de 2020 a las 7:55
-
@MikhailSharin Esto solo se aplica cuando se trans-pila de Kotlin a código de bytes de Java; por lo que solo se requiere para proyectos Kotlin (o proyectos mixtos), pero no se requiere para proyectos Java puros. Gracias por notarlo, porque estoy seguro de que esto eventualmente puede ayudar a alguien.
– Martín Zeitler
2 abr 2020 a las 17:11
-
Hombre, sé que no es profesional, ¡pero te amo! He estado luchando con él durante algunas horas, y al principio no vi la opción de compilación en mi gradle, así que la agregué y funciona perfecto, ¡gracias!
– Estantería Lidor Eliyahu
13 de diciembre de 2020 a las 16:56
-
En mi caso, estaba importando una nueva biblioteca de Android, mi biblioteca de Android era compatible con Java 8 pero mi proyecto principal no lo era. Mi solución fue hacer que ambos fueran compatibles con Java 8.
– Luis Muñoz
13 de agosto de 2021 a las 21:42
-
Tuve que hacer una compilación limpia después de implementar estos cambios para que funcionara.
– oziomajnr
23 de septiembre de 2021 a las 17:08
Puede resolver este error configurando compileOptions
en build.gradle
(aplicación) archivo.
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
-
Gracias @galian por tus inspiradoras palabras.
– Creador de códigos
21 de enero a las 12:56
Gk Mohammad Emón
En mi caso no fue por retrofit. Estaba usando un módulo de biblioteca local (nombrada Generador de XML a PDF de Android) que estaba usando Java version 1.8
(para usar Rx Java)pero mi nivel de aplicación Java version
era menos que 1.8
.
Así que simplemente agregué las siguientes líneas en mi nivel de aplicación construir.gradle –
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
¡Entonces funcionó para mí!
Brijesh Kumbhare
Intente refactorizar las dependencias de Retrofit.
Escribe esto:
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
Acabo de cambiar mis dependencias a abajo y proyecto limpio. Estaba usando la última versión de la biblioteca de actualización antes, pero fallé con el mismo error. Funcionó para mí.
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
Ya había agregado las opciones de Java 8 en build.gradle y todavía tenía el problema. Lo que funcionó para mí es mover .addConverterFactory() antes de llamar a baseUri()
– png
9 de marzo de 2021 a las 17:49