5

私は現在、Kotlin でコーディングされた Android アプリに取り組んでいます。昨日まではすべて問題ありませんでしたが、ある時点で logcat にこのエラーが発生し始めました。これが発生すると、アプリのコンテンツが表示されません。長い説明は次のとおりです。

11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: DexOpt: resolve class illegal access: Lch/XXX/XXX/commons/features/CouponsManager; -> Lkotlin/jvm/internal/DefaultConstructorMarker;
11-23 17:08:40.819 10472-10472/ch.XXX.XXX E/dalvikvm: Could not find class 'kotlin.jvm.internal.DefaultConstructorMarker', referenced from method ch.XXX.XXX.commons.features.CouponsManager.<init>
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: VFY: unable to resolve check-cast 3145 (Lkotlin/jvm/internal/DefaultConstructorMarker;) in Lch/XXX/XXX/commons/features/CouponsManager;
11-23 17:08:40.819 10472-10472/ch.XXX.XXX W/dalvikvm: DexOpt: resolve class illegal access: Lch/XXX/XXX/commons/features/CouponsManager; -> Lkotlin/jvm/internal/DefaultConstructorMarker;

参照されているクラスは Kotlin で記述されており、エラーが発生する前に変更されていません。

編集

問題を引き起こすクラスは次のとおりです。

class CouponsManager(private val api: RestApi = RestApi()) {

    fun getAllCoupons(): Observable<CouponDataResponse> {
        return Observable.create { subscriber ->

            val callResponse = api.getCoupons()
            val response = callResponse.execute()

            if (response.isSuccessful) {
                val coupons = response.body()

                subscriber.onNext(coupons)
                subscriber.onCompleted()
            } else {
                subscriber.onError(Throwable(response.message()))
            }

        }
    }

    fun getCoupons(): Observable<List<Coupon>> {
        return getAllCoupons().map {
            it.Coupons.map {
                Coupon(it.TopCouponImageUrl, it.BarcodeUrl, it.TopCouponText, it.BottomCouponText, it.BottomCouponImageUrl)
            }
        }
    }

    fun getLoyaltyCards(): Observable<List<Coupon>> {
        return getAllCoupons().map {
            it.Loyalty.map {
                Coupon(it.TopCouponImageUrl, it.BarcodeUrl, it.TopCouponText, it.BottomCouponText, it.BottomCouponImageUrl)
            }
        }
    }

}
4

1 に答える 1

5

で、@DimaRostopiraさんが言っていたように、KotlinはInstant Runに対応していないので、すでにオフになっていたのですが、どうやらAndroid Studioの新バージョンへのアップデート後、Instant Runに対応するビルドが完成したようで、そのため、部分的にしかコンパイルおよびキャッシュされていない、既に存在するビルド済みクラスの一部。

buildプロジェクトをクリーンアップしようとしましたが、プロジェクトを再び正しく実行するには、フォルダー全体を手動でワイプする必要がありました。

したがって、解決策はrm -Rf build/、プロジェクト フォルダーで Android Studio を開き、すべてをゼロから再構築することです。

于 2016-12-08T12:38:45.147 に答える