0

我的 Java 类中有这个:

public class ActionReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
        prefs.edit().putBoolean("saved", true).apply();
   }
}

这在我的 Kotlin 课程中:

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.mylayout)

        val prefs = getPreferences(MODE_PRIVATE)
        val saved = prefs.getBoolean("saved", false)

        System.out.println("Saved value: " + saved) // always prints false!
}

false即使调用了我的 Java 类中的代码,最后一行也总是会打印出来。为什么?

4

1 回答 1

3

getPreferences()为您提供一个首选项对象,该对象的范围仅限于您从中调用它的上下文(实际上只是在类之后命名它)。

使用getSharedPreferences()PreferenceManager.getDefaultSharedPreferences()获取在您的应用程序中全局共享的对象。

您的 Kotlin 类当前正在使用getPreferences(),因此它不会查看您在 Receiver 中使用的首选项,而您使用getSharedPreferences().

于 2020-10-10T15:06:43.243 回答