4

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

我发现,Android 类SharedPreferences可能是最简单的方法,但我不知道如何从 Delphi XE5 FMX Mobile 访问这个类。

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

4

1 回答 1

17

简而言之,将所需的 API 单元添加到 uses 子句中 - 在您的情况下,关键的是AndroidApi.Jni.JavaTypes,AndroidApi.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(''));

也就是说,我最近推出了一个包装API的简单TCustomIniFile后代- 请参阅此处了解信息:SharedPreferences

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

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

于 2013-09-14T10:19:43.463 回答