如何在Android应用程序中存储设置?
我希望我的应用程序保存/加载设置(并在“升级”/安装新版本时保留它们)。我可以为此使用哪个组件?我猜注册表将不可用:-)
更新:像字符串、数字或布尔值这样的设置。应用程序设置,用户在应用程序内部“管理”。
回答
Android 等价于 Registry 是SharedPreferences
您可以SharedPreferences通过TAndroidHelper.PrivatePreferences类函数轻松获取应用程序私有实例。
为了检索存储的设置,您可以使用以下方法:
JSharedPreferences = interface(IJavaInstance)
['{E44179D1-B961-4316-A8B0-45B52A482FA7}']
function &contains(key: JString): Boolean; cdecl;
function edit: JSharedPreferences_Editor; cdecl;
function getAll: JMap; cdecl;
function getBoolean(key: JString; defValue: Boolean): Boolean; cdecl;
function getFloat(key: JString; defValue: Single): Single; cdecl;
function getInt(key: JString; defValue: Integer): Integer; cdecl;
function getLong(key: JString; defValue: Int64): Int64; cdecl;
function getString(key: JString; defValue: JString): JString; cdecl;
function getStringSet(key: JString; defValues: JSet): JSet; cdecl;
procedure registerOnSharedPreferenceChangeListener(listener: JSharedPreferences_OnSharedPreferenceChangeListener); cdecl;
procedure unregisterOnSharedPreferenceChangeListener(listener: JSharedPreferences_OnSharedPreferenceChangeListener); cdecl;
end;
为了保存设置,您需要edit在首选项实例上调用方法,然后您可以使用以下编辑器方法来存储数据:
JSharedPreferences_Editor = interface(IJavaInstance)
['{A162AACF-DD6D-466E-838B-363E6B092CA4}']
procedure apply; cdecl;
function clear: JSharedPreferences_Editor; cdecl;
function commit: Boolean; cdecl;
function putBoolean(key: JString; value: Boolean): JSharedPreferences_Editor; cdecl;
function putFloat(key: JString; value: Single): JSharedPreferences_Editor; cdecl;
function putInt(key: JString; value: Integer): JSharedPreferences_Editor; cdecl;
function putLong(key: JString; value: Int64): JSharedPreferences_Editor; cdecl;
function putString(key: JString; value: JString): JSharedPreferences_Editor; cdecl;
function putStringSet(key: JString; values: JSet): JSharedPreferences_Editor; cdecl;
function remove(key: JString): JSharedPreferences_Editor; cdecl;
end;
完成修改设置后,您需要调用apply或commit在编辑器上。两者唯一的区别是apply只存储数据,commit返回操作成功与否。
以下是存储和读取布尔数据的简单示例。
保存数据:
uses
AndroidApi.Helpers,
Androidapi.JNI.GraphicsContentViewText,
var
Pref: JSharedPreferences;
PrefEditor: JSharedPreferences_Editor;
Success: Boolean;
begin
Pref := TAndroidHelper.PrivatePreferences;
PrefEditor := Pref.edit;
PrefEditor.putBoolean(StringToJString('key'), True);
PrefEditor.apply;
// or
Success := PrefEditor.commit;
end;
加载数据:
var
Pref: JSharedPreferences;
Value: Boolean;
begin
Pref := TAndroidHelper.PrivatePreferences;
Value := Pref.getBoolean(StringToJString('key'), False);
end;
您还可以使用任何自定义格式(如 Ini 文件)将数据保存在应用程序本地存储中。