这是我第一次使用 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) 为了更改应用程序的默认值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)