小编moh*_*aee的帖子

java.lang.RuntimeException:无法为 Kotlin MainActivity 实例化活动 ComponentInfo

这是我第一次使用 kotlin,出于某种原因,我必须在 MainActivity 中使用 kotlin 语言。我通过代码将我的 MainActivity 类更改为 kotlin 文件-> 将 Java 文件转换为 Kotlin 文件 但是当我运行我的代码时,我会收到以下错误:

java.lang.RuntimeException: Unable to instantiate activity 
ComponentInfo{ir.mohammadhf.sevenautoshow/ir.mohammadhf.sevenautoshow.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "ir.mohammadhf.sevenautoshow.MainActivity" on path: DexPathList[[zip file "/data/app/ir.mohammadhf.sevenautoshow-b4uU0l0_OCV9z_7YwD1uHg==/base.apk"],nativeLibraryDirectories=[/data/app/ir.mohammadhf.sevenautoshow-b4uU0l0_OCV9z_7YwD1uHg==/lib/x86, /data/app/ir.mohammadhf.sevenautoshow-b4uU0l0_OCV9z_7YwD1uHg==/base.apk!/lib/x86, /system/lib, /system/vendor/lib]]
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2718)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "ir.mohammadhf.sevenautoshow.MainActivity" on path: DexPathList[[zip file "/data/app/ir.mohammadhf.sevenautoshow-b4uU0l0_OCV9z_7YwD1uHg==/base.apk"]
Run Code Online (Sandbox Code Playgroud)

我搜索了类似的问题,但在大多数问题中,他们建议“在 Android 清单中声明活动”。但它已经为我完成了。

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest …
Run Code Online (Sandbox Code Playgroud)

java android kotlin

4
推荐指数
1
解决办法
2752
查看次数

如何使用 Hilt 访问 attachBaseContext 中的注入属性?

为了更改应用程序的默认值Locale,我必须在Activity内部的方法中访问我的WrapContext类:attachBaseContext

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject lateinit var wrapper: WrapContext

    .
    .
    .

    override fun attachBaseContext(newBase: Context?) {
        super.attachBaseContext(wrapper.setLocale(newBase!!))
    }
}
Run Code Online (Sandbox Code Playgroud)

但是正如您可以想象的那样,nullPointerException因为该字段是在attachBaseContext调用后注入的。

这是WrapContext类:

@Singleton
class WrapContext @Inject constructor() {

    fun setLocale(context: Context): Context {
        return setLocale(context, language)
    }

    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

我还尝试在MyApp类中注入WrapContext以便在Activity 中调用它时应该初始化该字段。

@HiltAndroidApp
class MyApp : Application() {
    @Inject lateinit var wrapper: WrapContext
}
Run Code Online (Sandbox Code Playgroud)

attachBaseContext 内部活动:

override …
Run Code Online (Sandbox Code Playgroud)

android dependency-injection dagger-hilt

3
推荐指数
1
解决办法
407
查看次数