Retrofit: java.lang.NoSuchMethodError: No static method metafactory

Created on 10 Jan 2020  ·  6Comments  ·  Source: square/retrofit

It seems the newest version implementation 'com.squareup.retrofit2:converter-scalars:2.7.1' has not convertFactory support. Follow code:

        val retrofit: Retrofit = Retrofit.Builder()
            .baseUrl("http://www.example.com")
            .addConverterFactory(ScalarsConverterFactory.create())
            .build()

It will report a no metafactory error, if I downgrade to 1.5.0, this code will work as well.

Needs Info

Most helpful comment

Is it possible to get a better error message about that?

Adding this fixes the exception but then it requires quite an effort to discover the solution:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.gdgfinder, PID: 13784
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.(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.android.gdgfinder.network.GdgApiServiceKt.(GdgApiService.kt:26)
at com.example.android.gdgfinder.network.GdgApiServiceKt.access$getRetrofit$p(GdgApiService.kt:1)
at com.example.android.gdgfinder.network.GdgApi$retrofitService$2.invoke(GdgApiService.kt:30)
at com.example.android.gdgfinder.network.GdgApi$retrofitService$2.invoke(GdgApiService.kt:29)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.example.android.gdgfinder.network.GdgApi.getRetrofitService(Unknown Source:2)
at com.example.android.gdgfinder.search.GdgListViewModel.(GdgListViewModel.kt:15)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.android.gdgfinder.search.GdgListFragment$viewModel$2.invoke(GdgListFragment.kt:26)
at com.example.android.gdgfinder.search.GdgListFragment$viewModel$2.invoke(GdgListFragment.kt:22)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.example.android.gdgfinder.search.GdgListFragment.getViewModel(Unknown Source:2)
at com.example.android.gdgfinder.search.GdgListFragment.onCreateView(GdgListFragment.kt:37)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2222)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1995)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1951)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
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)

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.gdgfinder, PID: 14120
retrofit2.HttpException: HTTP 404
at com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory$BodyCallAdapter$adapt$2.onResponse(CoroutineCallAdapterFactory.kt:104)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:150)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

All 6 comments

The latest version requires Java 8 and if you are using Android is requires that you're using a relatively modern toolchain (such as Android Gradle plugin 3.4.0 or newer). Can you describe your setup more?

Is it possible to get a better error message about that?

Adding this fixes the exception but then it requires quite an effort to discover the solution:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.gdgfinder, PID: 13784
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.(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.android.gdgfinder.network.GdgApiServiceKt.(GdgApiService.kt:26)
at com.example.android.gdgfinder.network.GdgApiServiceKt.access$getRetrofit$p(GdgApiService.kt:1)
at com.example.android.gdgfinder.network.GdgApi$retrofitService$2.invoke(GdgApiService.kt:30)
at com.example.android.gdgfinder.network.GdgApi$retrofitService$2.invoke(GdgApiService.kt:29)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.example.android.gdgfinder.network.GdgApi.getRetrofitService(Unknown Source:2)
at com.example.android.gdgfinder.search.GdgListViewModel.(GdgListViewModel.kt:15)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at com.example.android.gdgfinder.search.GdgListFragment$viewModel$2.invoke(GdgListFragment.kt:26)
at com.example.android.gdgfinder.search.GdgListFragment$viewModel$2.invoke(GdgListFragment.kt:22)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.example.android.gdgfinder.search.GdgListFragment.getViewModel(Unknown Source:2)
at com.example.android.gdgfinder.search.GdgListFragment.onCreateView(GdgListFragment.kt:37)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2222)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1995)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1951)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
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)

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.gdgfinder, PID: 14120
retrofit2.HttpException: HTTP 404
at com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory$BodyCallAdapter$adapt$2.onResponse(CoroutineCallAdapterFactory.kt:104)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:150)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

The latest version requires Java 8 and if you are using Android is requires that you're using a relatively modern toolchain (such as Android Gradle plugin 3.4.0 or newer). Can you describe your setup more?

I am using Java 8 with Gradle plugin 3.6.1. But still facing this error.
However implementing 1.5.0 version is working.

I have a similar error, with similar setup of retrofit builder.

Version 2.6.0 no errors, minor bump to 2.7.0 - 2.9.0 produces the stacktrace

    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)

Running on:

Android Studio 3.5.2
Build #AI-191.8026.42.35.5977832, built on October 31, 2019
JRE: 1.8.0_202-release-1483-b49-5587405 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.14.6

Gradle:

buildscript {
    ext {
        kotlin_version = '1.3.50'
        version_retrofit = 'tried-a-few-2.6-works'
        version_lifecycle_extensions = '2.0.0'
    }
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.example.pokemon"
        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 "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // ViewModel and LiveData
    implementation "androidx.lifecycle:lifecycle-extensions:$version_lifecycle_extensions"

    // Retrofit
    implementation "com.squareup.retrofit2:retrofit:$version_retrofit"
    implementation "com.squareup.retrofit2:converter-scalars:$version_retrofit"
}

Ran an emulator Nexus 5 API 29 (didn't try others)

Enable Java 8

On Sun, May 24, 2020, at 9:14 AM, Natalie Tan wrote:

I have a similar error, with similar setup of retrofit builder.

Version 2.6.0 no errors, minor bump to 2.7.0 - 2.9.0 produces the stacktrace

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)
Running on:

Android Studio 3.5.2 Build #AI-191.8026.42.35.5977832, built on October 31, 2019 JRE: 1.8.0_202-release-1483-b49-5587405 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o macOS 10.14.6
Gradle:

`buildscript {
ext {
kotlin_version = '1.3.50'
version_retrofit = 'tried-a-few-2.6-works'
version_lifecycle_extensions = '2.0.0'
}
repositories {
google()
jcenter()

}
dependencies {
    classpath 'com.android.tools.build:gradle:3.5.2'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

}
`

`apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.pokemon"
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 "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$version_lifecycle_extensions"

// Retrofit
implementation "com.squareup.retrofit2:retrofit:$version_retrofit"
implementation "com.squareup.retrofit2:converter-scalars:$version_retrofit"

}

`


You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub https://github.com/square/retrofit/issues/3280#issuecomment-633229226, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAQIEN2OODVRAXAS64AULTRTEMSNANCNFSM4KFFNIMQ.

Enable Java 8

Thanks. Works perfectly 👍

Followed the android java8-support guide: https://developer.android.com/studio/write/java8-support

Was this page helpful?
0 / 5 - 0 ratings