iアプリTips集

データの保存と読み込み

i アプリでテキストボックスの文字列の保存&読み込みを行うアプリケーションを作成してみましょう。i アプリから利用できる、携帯電話上の記憶領域のことをスクラッチパッドといい、この領域の情報はアプリが終了しても保持されているので次回の起動時に保存した情報を読みだすことができます。
プロジェクトの作成
  1. iαppliToolを起動し、プロジェクトの新規作成をクリックします。
  2. プロジェクト名にsaveLoadと入力し、「引き続きソースファイルを作成する」にチェックが入っていることを確認して「作成」をクリックします。
  3. 次の画面で、「テンプレートを利用する」の部分のチェックを外して「作成」をクリックします。
  4. 空のファイルsaveLoad.javaが作成されれば完了です。
コードの記述
  1. saveLoad.javaに、以下のコードを記述します。
  2. import com.nttdocomo.ui.*;
    import com.nttdocomo.io.*;
    import javax.microedition.io.*;
    import java.io.*;
    
    
    public class saveLoad extends IApplication {
       public void start() {
           /*
            * The program of IApplication is written here.
            */
           Display.setCurrent((Frame)new MainPanel());
       }
    }
    
    class MainPanel extends Panel implements SoftKeyListener{
       TextBox textbox;
        MainPanel() {
          setTitle("Application SaveLoad");
    
          // テキストボックス
          textbox = new TextBox("testMessage", 20, 3, TextBox.DISPLAY_ANY);
          add(textbox);
            
          //ソフトキーの設定
          setSoftLabel(SOFT_KEY_1,"保存");
          setSoftLabel(SOFT_KEY_2,"読込");
          setSoftKeyListener((SoftKeyListener)this);
       }
    
       public void softKeyPressed(int softKey) {
       }
    
       public void softKeyReleased(int softKey) {
          if (softKey == SOFT_KEY_1) {
             //保存処理
             try {
                DataOutputStream os = 
                   Connector.openDataOutputStream("scratchpad:///0");
                os.writeUTF(textbox.getText());
                os.close();
             } catch(IOException e) {
                System.out.println("保存に失敗しました");
             }
          }
          else if(softKey == SOFT_KEY_2){
             //読込処理
             try {
                DataInputStream is = 
                   Connector.openDataInputStream("scratchpad:///0");
                String text = is.readUTF();
                is.close();
                textbox.setText(text);
             } catch(IOException e) {
                System.out.println("読み込みに失敗しました");
             }
          }
       }
    }
    
  3. 入力が完了したらいったんビルドして、エラーが出ないことを確認してください。
ADFの設定
ADF設定をクリックし、SPsizeの項目に利用したいスクラッチパッドのサイズを入力します。今回は100とします。
※ADF設定の変更時にエラーが出た場合はこちら

作業が完了したら、ビルドして起動してみましょう。起動すると下のような画面が表示されます。
※ビルド時にエラーが出た場合はこちら
※ビルドしたが実行しても動作しない場合はこちら

青で囲まれたエリアはテキストボックスです。
左側のソフトキーを押すと、テキストボックスの内容をスクラッチパッドに保存します。
右側のソフトキーを押すと、スクラッチパッドの内容を読み込んでテキストボックスを更新します。
テキストボックスは選択ボタンで選んで編集することが可能です。
一度テキストボックスの内容を変更して保存し、アプリを再度起動して読込を押すと保存された情報が読み込まれることを確認してみてください。
ソースコードの解説
ソースコードの詳しい動作を説明します。
このプログラムでは、ボタンが離されたときに呼び出されるsoftKeyReleased()関数内部で保存および読込を行っています。
初めに保存関連の処理を見ます。
if (softKey == SOFT_KEY_1) {
左側のソフトキーが離されると、保存処理に入ります。
DataOutputStream os = Connector.openDataOutputStream("scratchpad:///0");
スクラッチパッドを開き、書き込める状態にします。openDataOutputStream関数を利用することで、Java共通のデータ出力方式が利用できるDataOutputStreamオブジェクトとして取得することができます。
os.writeUTF(textbox.getText());
テキストボックスの文字列を書き込みます。writeUTF関数は、文字列をUTF-8エンコーディングで長さ情報を付加して書き込むので、可変長の文字列を便利に取り扱うことができます。
os.close();
DataOutputStreamを閉じます。
} catch(IOException e) {
    System.out.println("保存に失敗しました");
}
何らかの例外が発生した場合、コンソールに失敗したことを通知します。

次に読み込み関連の処理を見ます。
else if(softKey == SOFT_KEY_2){
右側のソフトキーが離されると、読み込み処理に入ります。
DataInputStream is = Connector.openDataInputStream("scratchpad:///0");
スクラッチパッドを開き、読み込める状態にします。書き込みの時とほとんど同じですが、openDataOutputStream がopenDataInputStream に、DataOutputStream クラスがDataInputStreamクラスになっています。
is.close();
DataInputStreamを閉じます。
textbox.setText(text);
テキストボックスの文字列を変更します。
} catch(IOException e) {
    System.out.println("読み込みに失敗しました");
}
何らかの例外が発生した場合、コンソールに失敗したことを通知します。

※「iモード」「FOMA」「iアプリ」及び「i-appli」ロゴはNTTドコモの登録商標です。
※「Google」「Android」および「Android ロゴ」「Androidマーケット」とそのロゴは、Google Incの商標または登録商標です。
※「Adobe」「Flash」および「Flash Lite」は、 Adobe Systems Incorporated (アドビ システムズ社)の米国ならびにその他の国における商標または登録商標です。