В двух словах, добавьте необходимые единицы API в предложение uses — ключевыми в вашем случае являются AndroidApi.Jni.JavaTypes
, AndroidApi.Jni.App
и AndroidApi.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) и прочитать оттуда отдельные ключи.
person
Chris Rolliston
schedule
14.09.2013