4

我创建了一个使用匕首、房间、Moshi、Retrofit 等的应用程序......

在我将此行添加到我的模型类之前,它可以正常工作:@JsonClass(generateAdapter = true)

之后我收到此错误:

执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

java.lang.reflect.InvocationTargetException(无错误消息)

我不知道是什么问题,因为我的另一个应用程序使用的是 Moshi,而且效果很好。

我添加了所有的 Moshi 依赖项和插件

My gradle settings:
buildTypes {
        all {
            buildConfigField 'String', 'API_URL', "\"$apiurl\""

            lintOptions {
                abortOnError true
                //ignoreWarnings true
                fatal 'MissingTranslation', 'ExtraTranslation'
            }

        }

        debug {
            //applicationIdSuffix ".debug"
            ext.enableCrashlytics = false
            ext.alwaysUpdateBuildId = false
            multiDexEnabled true
        }

        staged {
            signingConfig signingConfigs.debug
            //applicationIdSuffix ".staged"
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', getDefaultProguardFile('proguard-android-optimize.txt')

            matchingFallbacks = ['debug']
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }

ApiModule:

  @Provides
    @Singleton
    fun provideMoshi(): Moshi {
        return Moshi.Builder()
            .add(DateConverter())
            .add(BigDecimalConverer())
            .add(KotlinJsonAdapterFactory())
            .build()
    }

@Provides
@Singleton
fun provideAuthApi(@Named("base_url") url: String, moshi: Moshi): AuthApi {

    var builder = OkHttpClient.Builder()
    builder = BuildTypeInitializations.setupInterceptor(builder)

    return Retrofit.Builder()
        .baseUrl(url)
        .addCallAdapterFactory(CoroutineCallAdapterFactory())
        .addConverterFactory(MoshiConverterFactory.create(moshi))
        .client(builder.build())
        .build()
        .create(AuthApi::class.java)
}

4

3 回答 3

4

最后,我解决了。我使用了 1.8.x 版本的 moshi,当我更新到 1.11.0 时,错误消失了

于 2020-12-04T09:21:08.673 回答
0

我和你有同样的问题,但对我来说,解决方案是添加implementation "com.squareup.moshi:moshi-adapters:$1.12.0"build.gradle文件中

于 2021-11-13T23:33:35.607 回答
0

我在处理 Room 实体时遇到了类似的问题,说的InvocationTargetExceptionkapt不存在的类型。经过长时间的调查,我发现包含实体的库也使用了 Moshi 并用@Json注释标记了一个实体,但是由于使用该库的应用程序没有导入 Moshi kapt 无法解析导致错误的类型。解决方案是通过“api”而不是“实现”在库中导入 Moshi,或者通过“实现”在客户端应用程序中导入 Moshi。

于 2022-02-10T16:14:21.767 回答