2013-09-14 3 views
5

Я только что начал с пути разработки Android с помощью Delphi XE5 и пытаюсь создать простое приложение, которое должно быть в состоянии сохранить некоторую введенную информацию (конфигурацию).Доступ к классу SharedPreferences от Android из Delphi

Я выяснил, что класс Android SharedPreferences, вероятно, самый простой способ сделать это, но я не могу понять, как получить доступ к этому классу из Delphi XE5 FMX Mobile.

Я попытался найти «SharedPreferences» в справке, но ничего не возвращает. С другой стороны, поиск «общих предпочтений» дает мне слишком много.

+0

Это связано? http://stackoverflow.com/questions/4265492/why-delphi-says-cannot-resolve-unit-name-xxx –

+0

Нет, к сожалению, это не так. Но спасибо за попытку ... – HeartWare

ответ

17

В двух словах, добавьте необходимые блоки 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 ключи сильно типизированных, и не кажется, что должен быть способ, чтобы найти вне форума e какой тип имеет данный ключ (клавиши в TCustomIniFile, напротив, слабо типизированы). Из-за этого, для чтения, я использую метод getAll для того, чтобы вернуть все ключи и значения как Map/JMap (объект словаря Java другими словами) и прочитать отдельные ключи оттуда.

+0

Это именно то, что я искал. Теперь я могу поддерживать общий интерфейс на разных платформах ... Блок MAC - это также для iPhone/iPad или только для MacOS? – HeartWare

+0

Да. Я только что сделал фиксацию, которая эффективно переименовывает TMacPreferencesIniFile в TApplePreferencesIniFile, чтобы подчеркнуть суть. Соответственно, блок теперь CCR.Apple.PrefsIniFile.pas, и я добавил общую «мобильную» демоверсию. –

+2

+1 и Добро пожаловать @ChrisRolliston в stackoverflow;) – RRUZ