当前位置: 首页 > 知识库问答 >
问题:

Android Studio:初始化共享首选项破坏活动启动

贝自怡
2023-03-14
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)

共有1个答案

池庆
2023-03-14

具体来说是这样的:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String android.content.Context.getPackageName()' on a null object
reference at
android.content.ContextWrapper.getPackageName(ContextWrapper.java:149) at
android.app.Activity.getLocalClassName(Activity.java:6738) at
android.app.Activity.getPreferences(Activity.java:6782) at
my.company.example.PlayActivity$prefs$2.invoke(PlayActivity.kt:39) at

它崩溃是因为您试图对空上下文调用GetPackageName(),这是通过PlayActivity.kt第39行的Preferences对象引起的GetPreference()调用而发生的。

在构造活动时,会初始化这些成员函数,但此时活动还没有上下文--这种情况发生在生命周期的稍后阶段,在调用oncreate时,它就已经准备好了。所以有些事情必须在以后初始化(lateinit对于类似的事情很有用)

sharedPreferences.edit { putBoolean("key", value) 
 类似资料:
  • 问题内容: 我在这个.java文件中有一个SharedPreference;在底部,您可以看到我将值保存到SharedPreferences GB_PREFERENCES_BENCH和GB_PREFERENCES_FLIES。如何在其他活动中使用这些值?请参阅第二个代码示例以了解如何使用它。 这是我要使用的方式;(特别是在on create方法中,将TextView的文本设置为SharePrefe

  • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?

  • 非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。 } 我可能做了很多明显的愚蠢的事情,但我真的弄不明白。 多谢!

  • 更新崩溃日志:

  • 我在我的多个项目中使用了共享首选项的代码,它正常工作,但现在当我在另一个项目中应用相同的代码时,它停止工作。以下是错误

  • 当我发送FCM消息且应用程序处于后台时,我想清除共享首选项。在方法中,我正在调用一个方法来清除它们。 我得到以下错误: 未处理的异常:MissingPluginException(在channel plugins.flatter.io/shared_首选项上找不到方法getAll的实现)