Android kotlin协程 使用retrofit时出现的异常:java.lang.NoSuchMethodError: No static method metafactory

配置gradle:

//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
def coroutines = "1.3.7"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
// ViewModel and LiveData
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

1.创建data class

data class DeviceBean(val errorCode:String, val errorMsg:String, val data:String)

2.retrofit接口类

interface NetService {
    //包含三个参数,在接口中直接返回data class,函数名称加suspend供协程调用
    @GET("/products/isEnabled")
    suspend fun checkDevice(@Query("productName") deviceName:String,@Query("deviceId") deviceId:String,@Query("deviceLocation") deviceLoc:String):DeviceBean
}

3.retrofit初始化,创建服务接口

Retrofit mRetrofit = new Retrofit.Builder()
                .client(okHttpBuilder.build())
                .baseUrl(baseUrl) //设置网络请求的Url地址
                .addConverterFactory(GsonConverterFactory.create())
                .build();
val netService:NetService = mRetrofit.create(NetService::class.java);

4.在协程中调用网络接口(此处省略了部分协程及viewmodel相关的代码)

val data = netService.checkDevice(type,it,country)//直接调用接口,获取结果

liveData.postValue(data)//viewmodel中保存的livedata对象,用于界面观察数据变化;此处省略了部分相关代码

至此协程中使用retrofit查询网络接口相关代码基本完成,执行得到如下异常:

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)

解决:

查阅资料后发现新版本需要使用Jdk1.8版本

minSdkVersion至少为21,Android Gradle插件版本至少为3.2

还需要将Java版本设置为1.8或更高版本。在源代码中使用Java 8功能(lambdas)

在gradle中加入以下配置:

 compileOptions {

       sourceCompatibility JavaVersion.VERSION_1_8

      targetCompatibility JavaVersion.VERSION_1_8

}

 

重新编译运行,执行结果成功

记录下,方便下次再遇见相同问题时可以查看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值