【问题标题】:What is the reason 'getSharedPreferences' method called by not making instance of ContextWrapper in Kotlin?通过不在 Kotlin 中创建 ContextWrapper 实例而调用“getSharedPreferences”方法的原因是什么?
【发布时间】:2020-02-11 04:07:51
【问题描述】:

我写了如下代码,

val preference by lazy {
    getSharedPreferences("PreExActivity", Context.MODE_PRIVATE)
}

并且想知道“getSharedPredferences”方法的根源..

所以我找到了 API..

public class ContextWrapper extends Context {
    @Override
    public SharedPreferences getSharedPreferences(String name, int mode) {
        return mBase.getSharedPreferences(name, mode);
    }
}

使用我在第一个代码中编写的 getSharedPreferences 方法是否正确?

我认为..

ContextWrapper().getSharedPreferences("PreExActivity", Context.MODE_PRIVATE)

是使用那个方法的方式。

这怎么可能?

【问题讨论】:

  • 您忽略了preference 属性所属类的重要部分。例如,Activity 扩展了 ContextWrapper
  • 抱歉错过了。'preference'属于Activity extends AppCompatActivity。

标签: android kotlin sharedpreferences


【解决方案1】:

所以你从你的AppCompatActivity 调用getSharedPreferences 方法。 这是完全正确的。

AppCompatActivity 扩展FragmentActivity,扩展ComponentActivity,扩展Activity,扩展ContextThemeWrapper,扩展ContextWrapper,扩展ContextContext 是一个 abstract 类,它实际上定义了 getSharedPreferences 方法。

使用Activity 调用getSharedPreferences(String name, int mode) 方法实际上是调用ContextWrappergetSharedPreferences(String name, int mode),因为Activity 继承了它。

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2017-11-16
    • 2016-06-11
    相关资源
    最近更新 更多