4

Delphi XE5 を使用して Android 開発パスを開始したばかりで、入力された情報 (構成) を保持できるようにする必要がある単純なアプリケーションを構築しようとしています。

Android クラスSharedPreferencesがおそらくこれを行う最も簡単な方法であることがわかりましたが、Delphi XE5 FMX Mobile からこのクラスにアクセスする方法がわかりません。

ヘルプで「SharedPreferences」を検索してみましたが、何も返されません。一方、「Shared Preferences」を検索すると、情報が多すぎます。

4

1 に答える 1

17

簡単に言えば、必要な API ユニットを uses 句に追加します。この場合の重要な 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(''));

そうは言っても、私は最近、APITCustomIniFileをラップする単純な子孫を公開しSharedPreferencesました。詳細については、こちらを参照してください。

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

API を にマッピングする際TCustomIniFileに見つけた小さな問題の 1 つは、SharedPreferencesキーが強く型付けされているという事実であり、特定のキーがどのような型を持っているかを事前に調べる方法がないようです (TCustomIniFile対照的に、 のキーは弱く型付けされています)。 )。このため、読み取りのために、getAllメソッドを使用してすべてのキーと値をMap/ JMap(つまり、Java 辞書オブジェクト) として取得し、そこから個々のキーを読み取ります。

于 2013-09-14T10:19:43.463 に答える