Доступ к классу Android SharedPreferences из Delphi
Я только что начал путь разработки Android с использованием Delphi XE5 и пытаюсь создать простое приложение, которое должно сохранять некоторую введенную информацию (конфигурацию).
Я понял, что класс Android SharedPreferences, вероятно, является самым простым способом сделать это, но я не могу понять, как получить доступ к этому классу с Delphi XE5 FMX Mobile.
Я попытался найти "SharedPreferences" в справке, но он ничего не возвращает. С другой стороны, поиск "Общие настройки" дает мне слишком много.
1 ответ
В двух словах, добавьте необходимые единицы API к предложению использования - ключевыми в вашем случае являются 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
потомок, который оборачивает SharedPreferences
API - см. Здесь для информации:
http://delphihaven.wordpress.com/2013/09/12/a-few-xe5-related-bits/
При сопоставлении API для TCustomIniFile
, одна небольшая проблема, которую я обнаружил, это факт SharedPreferences
ключи строго типизированы, и, кажется, нет способа заранее выяснить, какой тип имеет данный ключ (ключи в TCustomIniFile
напротив, слабо набраны). Из-за этого, для чтения, я использую getAll
метод, чтобы получить все ключи и значения как Map
/JMap
(Java словарь объекта другими словами) и читать отдельные ключи оттуда.