Mind for Android マニュアル




プリファレンス



 Android にはアプリ固有の(たとえば設定情報のような)データを記憶・参照するための簡便な機構が用意されていて、「プリファレンス」と呼ばれます。
 プリファレンスは、いわば簡単なデータベースのようなもので、「キー」と「値」のペアを記憶することができます。アプリが終了しても記憶されるので、アプリ独特の設定情報などを記憶するのに向いています。
 たとえば Mind for Android のパッケージローダ(MindPkgLoader)も、ユーザIDなどを記憶するのにプリファレンスを使っています。


プリファレンスを操作する単語群

■プリファレンスをオープン
 プリファレンスを使うにあたってまず最初に実行する処理単語です。
文法
<ファイル名>と <共有モード>で プリファレンスをオープン
                       (成功)→ 真
                       (失敗)→ <ErrorMessage>、偽
 <ファイル名> はファイル名とは言っても識別子のようなものなので拡張子は不要です。そのアプリで複数のプリファレンスを使う場合に区別できれば良い‥という程度のものと考えてください。

 <共有モード> は、他のアクティビティとの共有モードを指定するものです。通常は、定数「MODE_PRIVATE」を指定すれば良いでしょう。同じアクティビティ内であるいは同一パッケージ内アクティビティ同士で共用できます。
共有モードには以下があります。
      MODE_PRIVATE
      MODE_WORLD_READABLE        ←現在のMind for Androidでは非サポート
      MODE_WORLD_WRITEABLE       ←現在のMind for Androidでは非サポート
 なお、プリファレンスに対してこれから書き込みをおこなうのか、読み出しをおこなうのかは共有モードには関係ありません。

 戻り値 ですが、成功時と失敗時で異なる情報がスタックに返されるので注意してください。
 成功時にはスタックには (=1) のみが、失敗時には エラーメッセージ偽(=0) が返されます。いずれにしてもスタックトップには真偽が積まれているので、呼び出し直後はまずは 「偽? ならば ・・」 で受けてエラー分岐をおこなってください。

記述例
ボタンクリック処理とは (ボタンID → 戻値)
    〜略〜
    "setting"と MODE_PRIVATEで プリファレンスをオープンし 偽?
        ならば (ErrorMessageを) ちょっと表示し
			0を 返し
            終り
        つぎに


■プリファレンスをクローズ
 プリファレンスを操作する処理群の最後でこれを実行してください。
文法
プリファレンスをクローズ → ・


■プリファレンスのエディタを割り当て       (書き込み系のみ)
 書き込みを行うには、一連の書き込みの前に一度だけ、プリファレンスに対して「エディタ」と呼ばれるものを割り当てる必要があります。
文法
プリファレンスのエディタを割り当て
              (成功)→ 真
              (失敗)→ <ErrorMessage>、偽
 戻り値 ですが、成功時と失敗時で異なる情報がスタックに返されるので注意してください。
 成功時にはスタックには (=1) のみが、失敗時には エラーメッセージ偽(=0) が返されます。いずれにしてもスタックトップには真偽が積まれているので、呼び出し直後はまずは 「偽? ならば ・・」 で受けてエラー分岐をおこなってください。
 また、次の記述例にもありますが、本単語がエラーリターンした場合、プリファレンスは既にオープン済みのはずなので、それをクローズしてから後続処理を打ち切るようにしてください。
記述例
ボタンクリック処理とは (ボタンID → 戻値)
    〜略〜
    "setting"と MODE_PRIVATEで プリファレンスをオープンし 偽?
        ならば (ErrorMessageを) ちょっと表示し
			0を 返し
            終り
        つぎに
    プリファレンスのエディタを割り当て 偽?         ならば (ErrorMessageを) ちょっと表示し プリファレンスをクローズし   ←既にオープンしているので脱出前にクローズ             0を 返し             終り         つぎに


■プリファレンスのエディタを解放       (書き込み系のみ)
 前記した 「プリファレンスのエディタを割り当て」 したものを解放します。
 タイミングとしては、書き込み操作の最後の 「プリファレンスをコミット」 のさらに後になります。
文法
プリファレンスのエディタを解放 → ・


■データの書き込み
 プリファレンスに記入するデータは必ず <キー> と <値> の対てす。キーは常に文字列ですが、値は論理値/整数/文字列のように種類があります。
文法
<キー>と <値(1/0)>を プリファレンスに論理値を書き込み
                                                (成功)→ 真
                                                (失敗)→ <ErrorMessage>、 偽

<キー>と <値(整数)>を プリファレンスに整数を書き込み
                                                (成功)→ 真
                                                (失敗)→ <ErrorMessage>、 偽

<キー>と <値(文字列)>を プリファレンスに文字列を書き込み
                                                (成功)→ 真
                                                (失敗)→ <ErrorMessage>、 偽
 戻り値 ですが、成功時と失敗時で異なる情報がスタックに返されるので注意してください。
 成功時にはスタックには (=1) のみが、失敗時には エラーメッセージ偽(=0) が返されます。いずれにしてもスタックトップには真偽が積まれているので、呼び出し直後はまずは 「偽? ならば ・・」 で受けてエラー分岐をおこなってください。(「
一連の書き込み処理の記述例」 参照)
 本単語がエラーリターンした場合、プリファレンスは既にオープン済みのはずなので、それをクローズしてから後続処理を打ち切るようにしてください。(「一連の書き込み処理の記述例」 参照)


■データの読み出し
 既に書き込んだキーを指定してその値を読み出すことができます。
 読み出し対象となるデータが論理値/整数/文字列のどれかによって以下の種類があります。
文法
<キー>と <デフォルト値(1/0)>で プリファレンスの論理値を読み出し
                                                      (成功)→ 値、 真
                                                      (失敗)→ <ErrorMessage>、 偽

<キー>と <デフォルト値(整数)>で プリファレンスの整数を読み出し
                                                      (成功)→ 値、 真
                                                      (失敗)→ <ErrorMessage>、 偽

<キー>と <デフォルト値(文字列)>で プリファレンスの文字列を読み出し
                                                      (成功)→ 値、 真
                                                      (失敗)→ <ErrorMessage>、 偽
 戻り値は、成功時と失敗時で異なる情報がスタックに返されるので注意してください。
 成功時にはスタックには 読み出した値 (=1) が、失敗時には エラーメッセージ偽(=0) が返されます。いずれにしてもスタックトップには真偽が積まれているので、呼び出し直後はまずは 「偽? ならば ・・」 で受けてエラー分岐をおこなってください。(下の記述例参照)
 プリファレンスの中に指定したキーが存在しない場合、エラーにはならずにデフォルト値が返されます。
 本単語がエラーリターンした場合、プリファレンスは既にオープン済みのはずなので、それをクローズしてから後続処理を打ち切るようにしてください。(下の記述例参照)
記述例
ボタンクリック処理とは (ボタンID → 戻値)
        氏名は 文字列実体 長さ 40桁
    〜略〜
    "setting"と MODE_PRIVATEで プリファレンスをオープンし 偽?
        ならば (ErrorMessageを) ちょっと表示し  ←スタックにはエラーメッセージが積まれているのでそれを表示
			0を 返し
            終り
        つぎに

          ↓キー"name"が存在しない場合は空列を返すよう指示 "name"と 空列で プリファレンスの文字列を読み出し 偽? ならば (ErrorMessageを) ちょっと表示し  ←スタックにはエラーメッセージが積まれているのでそれを表示             プリファレンスをクローズし ←クローズしてからリターンすること 0を 返し             終り つぎに 氏名に 入れ ←スタックには読み出し値が詰まれているのでここで降ろす
    〜略〜     プリファレンスをクローズし


■プリファレンスをコミット       (書き込み系のみ)
 一連の書き込みのあとこのコミットをおこなうことで最終的にファイルへの書き込みが行われます。
文法
プリファレンスをコミット
         (成功)→ 真
         (失敗)→ <ErrorMessage>、偽


■プリファレンスのキーを削除
 指定したキーのレコードを削除します。
 本単語の実行の前には 「プリファレンスのエディタを割り当て」 を、後には 「プリファレンスをコミット」 を実行してください。
文法
<キー>を プリファレンスのキーを削除
                (成功)→ 真
                (失敗)→ <ErrorMessage>、偽


■プリファレンスを削除
 プリファレンス自体を削除します。
 本単語の実行の前には 「プリファレンスのエディタを割り当て」 を、後には 「プリファレンスをコミット」 を実行してください。
文法
プリファレンスを削除
         (成功)→ 真
         (失敗)→ <ErrorMessage>、偽



一連の書き込み処理の記述例

 ここまで解説した一連の書き込み処理の記述例を以下に示します。
記述例1  (ありのまま書いたもの)
一連の書き込み処理とは (・ → [ErrorMessage]、真偽)
    "setting"と MODE_PRIVATEで プリファレンスをオープンし 偽?
        ならば (ErrorMessageと) 偽を 返し
            終り
        つぎに

    プリファレンスのエディタを割り当て 偽?
        ならば プリファレンスをクローズし
            (ErrorMessageと) 偽を 返し
            終り
        つぎに

    "age"と 62を プリファレンスに整数を書き込み 偽?
        ならば プリファレンスのエディタを解放し
            プリファレンスをクローズし
            (ErrorMessageと) 偽を 返し
            終り
        つぎに

    "name"と 「山田太郎」で プリファレンスに文字列を書き込み 偽?
        ならば プリファレンスのエディタを解放し
            プリファレンスをクローズし
            (ErrorMessageと) 偽を 返し
            終り
        つぎに

    プリファレンスをコミットし 偽?
        ならば プリファレンスのエディタを解放し
            プリファレンスをクローズし
            (ErrorMessageと) 偽を 返し
            終り
                つぎに

    プリファレンスのエディタを解放し
        プリファレンスをクローズし

	真を 返すこと。

記述例2  (後片付けを合理的に書き直したもの)
一連の書き込み処理とは (・ → [ErrorMessage]、真偽)
		_オープン済みは 変数
		_割り当て済みは 変数
	※
  _エディタ解放とクローズとは (・ → ・)
	_割り当て済み
		ならば _割り当て済みを クリアし
  			プリファレンスのエディタを解放し
		つぎに
	_オープン済み
		ならば _オープン済みを クリアし
			プリファレンスをクローズし
		つぎに
	※
  本体とは
	_オープン済みを クリアし
	_割り当て済みを クリアし

    "setting"と MODE_PRIVATEで プリファレンスをオープンし 偽?
        ならば (ErrorMessageと) 偽を 返し
            終り
        つぎに
	_オープン済みを セットし

    プリファレンスのエディタを割り当て 偽?
        ならば _エディタ解放とクローズし
            (ErrorMessageと) 偽を 返し
            偽を 返し
            終り
        つぎに
	_割り当て済みを セットし

    "age"と 62を プリファレンスに整数を書き込み 偽?
        ならば _エディタ解放とクローズし
            (ErrorMessageと) 偽を 返し
            偽を 返し
            終り
        つぎに

    "name"と 「山田太郎」で プリファレンスに文字列を書き込み 偽?
        ならば _エディタ解放とクローズし
            (ErrorMessageと) 偽を 返し
            偽を 返し
            終り
        つぎに

    プリファレンスをコミットし 偽?
        ならば _エディタ解放とクローズし
            (ErrorMessageと) 偽を 返し
            偽を 返し
            終り
                つぎに

    _エディタ解放とクローズし
	真を 返すこと。



プリファレンスのサンプルプログラム

 プリファレンスを操作するサンプルプログラムをコンパイルしてみます。
 既に
ログインからサンプルアプリのコンパイルまで - 1つのサンプルアプリを試しにコンパイル にて1つのサンプルアプリをコンパイルしていたはずですが、ここではプリファレンスを操作するサンプルプログラム (フォルダ名 Preference) をコンパイルしてみます。
 サンプルプログラム群のうち、次のものを使います。
    andrmindSample/
    |-- 〜略〜
 〜略〜
    |-- Preference/
    |   `-- SpPre.src            ←プリファレンスのサンプル
 〜略〜
 まず、端末との連携(パッケージローダ) での解説に従って、パッケージローダを起動、さらにそこからサービスを起動しておいてください。
 次に、Mind for Android のメイン画面で、「新しいアプリの作成」ボタンを押し、その状態で、サンプルプログラムの上記フォルダ内にある SpPre.src をアップロードします。アップロードと同時に SpPre というアプリが自動作成されます。
 次いで「コンパイル」ボタンを押してコンパイルするとアプリ SpPre が端末にダウンロード/インストールされるはずです。
 インストールが終ったら起動してください。次の画面が表示されます。



 まず書き込み系のテストを行います。「プリファレンスに全て書き込み」ボタンをタップしてください(画面上の反応は特にありません)。

 次に読み出しをおこないます。「プリファレンスを全て読み出し」ボタンをタップしてください。次のように画面下段に結果が表示されます。






Copyright(C) 2000 Scripts Lab. Inc.