【发布时间】:2021-02-16 10:33:15
【问题描述】:
我的 android 应用在从主 Activity 启动 Activity 时崩溃,但只有在我初始化 SharedPreferences 对象时才会崩溃。
在主要活动中:
package my.investing.investingtestapp
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnPlay.setOnClickListener {
// Handler code here.
val I = Intent(this, PlayActivity::class.java)
startActivity(I);
}
}
}
在玩活动中:
package my.company.example
import android.content.Context
import android.content.SharedPreferences
import android.content.SharedPreferences.Editor
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class PlayActivity : AppCompatActivity() {
val prefs: SharedPreferences? by lazy { this.getPreferences(Context.MODE_PRIVATE) }
val editor: Editor = prefs!!.edit()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_play2)
}
}
这也适用于:
val prefs = this.getPreferences(Context.MODE_PRIVATE)
错误: java.lang.RuntimeException:无法实例化活动 ComponentInfo{my.company.example/my.company.example.PlayActivity}:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.content.Context。空对象引用上的 getPackageName()' 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Context.getPackageName()” 在 android.content.ContextWrapper.getPackageName(ContextWrapper.java:149) 在 android.app.Activity.getLocalClassName(Activity.java:6738) 在 android.app.Activity.getPreferences(Activity.java:6782) 在 my.company.example.PlayActivity$prefs$2.invoke(PlayActivity.kt:39) 在 my.company.example.PlayActivity$prefs$2.invoke(PlayActivity.kt:37) 在 kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) 在 my.company.example.PlayActivity.getPrefs(未知来源:2) 在 my.company.example.PlayActivity.(PlayActivity.kt:40) 在 java.lang.Class.newInstance(本机方法) 在 android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) 在 androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1253) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
【问题讨论】:
标签: android-studio kotlin