从Delphi访问Android的SharedPreferences类

时间:2013-09-14 07:45:19

标签: android delphi delphi-xe5

我刚开始使用Delphi XE5开发Android开发路径,并且正在尝试构建一个需要能够保留一些输入信息(配置)的简单应用程序。

我已经想到,Android类SharedPreferences可能是最简单的方法,但是我无法弄清楚如何从Delphi XE5 FMX Mobile访问这个类。

我尝试在帮助中搜索“SharedPreferences”,但它什么也没有返回。另一方面,搜索“共享偏好”给了我太多。

1 个答案:

答案 0 :(得分:17)

简而言之,将所需的API单元添加到uses子句中 - 您的案例中的关键单元是AndroidApi.Jni.JavaTypesAndroidApi.Jni.AppAndroidApi.Jni.GraphicsContentViewText,以及FMX.Helpers.Android对于一些胶水代码 - 并且它就像在Java中一样调用它。 Java类作为具有初始J的接口类型公开;实际上,Android API使用嵌套类很多,而且由于Delphi不支持嵌套接口类型,因此它们变为ParentClassName_ChildClassName:

var
  Prefs: JSharedPreferences;
  Editor: JSharedPreferences_Editor;
  I: Integer;
  F: Single;
  S: string;
begin
  Prefs := SharedActivity.getPreferences(TJActivity.JavaClass.MODE_PRIVATE);
  Editor := Prefs.edit;
  Editor.putInt(StringToJString('MyIntKey'), 999);
  Editor.putFloat(StringToJString('MyFloatKey'), 123.456);
  Editor.putString(StringToJString('MyStrKey'), StringToJString('This is a test'));
  Editor.apply;
  I := Prefs.getInt(StringToJString('MyIntKey'), 0);
  F := Prefs.getFloat(StringToJString('MyFloatKey'), 0);
  S := Prefs.getString(StringToJString('MyIntKey'), StringToJString(''));

那就是说,我最近推出了一个包含TCustomIniFile API的简单SharedPreferences后代 - 请点击此处获取信息:

http://delphihaven.wordpress.com/2013/09/12/a-few-xe5-related-bits/

在将API映射到TCustomIniFile时,我发现的一个小问题是SharedPreferences键是强类型的,并且似乎没有办法提前找出什么类型的给定键具有(TCustomIniFile中的键,相反,键入弱)。因此,为了阅读,我使用getAll方法将所有键和值作为Map / JMap(换言之,Java字典对象)进行检索,并从那里读取单个键。