Доступ к классу 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 словарь объекта другими словами) и читать отдельные ключи оттуда.

Другие вопросы по тегам