当应用程序打开时,我的应用程序为"默认字体大小"创建了一个默认的SharedPrferences
(具体来说:在我的AppUtils
类中为public static final String DEFAULT_FONT_SIZE_KEY = "defaultFontSize";
). 看起来我可以用默认值16创建这个SharedPreferences
,在创建之后,我立即try 转储所有的值键,没有任何返回. 在代码的这一点上,我还没有实现也没有调整字体大小键的值,只有第一步-创建并立即通过转储判断它是否被存储. 创建后,转储中不返回任何内容.
应用程序android.intent.action.MAIN
是WelcomeActivity
级的.在这个类中,我声明SharedPreferences
,然后在onCreate
中使用对AppUtils.initializeSharedPreferences
的方法调用进行初始化:
...
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
AppUtils.initializeSharedPreferences(this);
sharedPreferences = AppUtils.getSharedPreferences();
...
方法initializeSharedPreferences
只被调用一次,should将创建DEFAULT_FONT_SIZE_KEY
,因此如果不存在SharedPreference
,则创建SharedPreference
,以下是AppUtils
类中的方法:
public static void initializeSharedPreferences(Context context) {
if (sharedPreferences == null) {
sharedPreferences = context.getSharedPreferences("SongTrackerApp", Context.MODE_PRIVATE);
if (getDefaultFontSize(sharedPreferences) == 0) {
saveDefaultFontSize(sharedPreferences, 16);
}
Log.d("AdjustTextSize", "(AppUtils) INIT: line #17, 1st Value-DEFAULT_FONT_SIZE_KEY: " + getDefaultFontSize(sharedPreferences));
}
Log.d("AdjustTextSize", "(AppUtils) INIT: line #19, DEFAULT_FONT_SIZE_KEY: " + getDefaultFontSize(sharedPreferences) + ", context: " + context);
}
同样在WelcomeActivity
类的onCreate
中,我获得了DEFAULT_FONT_SIZE_KEY
的值,然后调用一个方法来转储所有SharedPreferences(请参见dbHelper.logSharedPreferencesEntries
):
// Get all key-value pairs from SharedPreferences
if (sharedPreferences != null) {
// Print out all sharedPreferences:
Log.d("AdjustTextSize", "(WelcomeActivity) line #77, DEFAULT_FONT_SIZE_KEY: " + AppUtils.getDefaultFontSize(sharedPreferences));
dbHelper.logSharedPreferencesEntries(sharedPreferences, "WelcomeActivity");
}
Log.d
表示DEFAULT_FONT_SIZE_KEY
实际上是SharedPreferences
:
(WelcomeActivity) line #77, DEFAULT_FONT_SIZE_KEY: 16.0
在代码的这一点上,我仍然处于Main
活动中,并调用DatabaseHelper
类(dbHelper.logSharedPreferencesEntries
)中的一个方法来转储所有的SharedPreferences
,但是没有返回任何结果.下面是方法logSharedPreferencesEntries
,它为if (allEntries.isEmpty()) ...
返回‘True’:
public void logSharedPreferencesEntries(SharedPreferences sharedPreferences, String pageName) {
Map<String, ?> allEntries = sharedPreferences.getAll();
// Check if there are any entries
if (allEntries.isEmpty()) {
Log.d("AdjustTextSize", "(DBHelper via: " + pageName + ") DUMP line #1063 No sharedPreference keys found");
return;
}
// Iterate through the entries and log them
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// Display constant name, key name, and value in Log.d
String constantName = findConstantName(key);
Log.d("AdjustTextSize", "(DBHelper via: " + pageName + ") DUMP line #1072 - Constant: " + constantName + ", Key: " + key + ", Value: " + value.toString());
}
}
我研究了Stackoverflow中的其他相关条目,尽管许多与SharedPreferences
个相关的问题都可以追溯到2012年-最近的任何事情似乎都没有解决我2023年的问题.
感谢您发送编修.
EDIT: 12.14.2023 In response to @ltp个
谢谢你@ltp,我用editor.commit();
替换了editor.apply();
,后者是您的建议,并且是同步工作的,因此我应该直接看到影响,而不是异步apply()
.好奇的是,我在initializeSharedPreferences
方法中设置了SharedPreferences
:
public static void initializeSharedPreferences(Context context) {
if (sharedPreferences == null) {
sharedPreferences = context.getSharedPreferences("SongTrackerApp", Context.MODE_PRIVATE);
if (getDefaultFontSize(sharedPreferences) == 0) {
saveDefaultFontSize(sharedPreferences, 16);
}
}
}
在调用initializeSharedPreferences
之后的下一行代码是方法‘转储’所有SharedPreferences
--即使是commit()
,我仍然得到Log.d
"没有找到共享首选项键"--我知道在前一行中已经设置了它.如果我使用编程到应用程序代码中的内容更改文本大小,经过大约2-3次try 后,我确实看到‘Dump’方法显示Constant: DEFAULT_FONT_SIZE_KEY, Key: defaultFontSize, Value: 0.0
,但字体大小不准确,我相信这是一个单独的问题,所以目前将忽略.如有其他 comments ,敬请垂询!