SharedPreferencesを使ったデータの保存と書き込み

SharedPreferencesを使うと、データの保存と書き込みが簡単にできます。

データの書き込み
aTextView = (TextView) findViewById(R.id.myTextView);
SharedPreferences pref = this.getSharedPreferences(“MemoPrefs”, MODE_PRIVATE);
aTextView.setText(pref.getString(“memo”, “”));

説明:
“MemoPrefs”という名前のxmlファイルを呼び出して、その中にある、”memo”という名前が付けられたデータをaTextViewにセットしています。また、データの書き込みはonCreateメソッドの中で処理を行うのが一般的みたいです。

データの保存
aTextView = (TextView) findViewById(R.id.myTextView);
int x = 10;
SharedPreferences pref = this.getSharedPreferences(“MemoPrefs”, MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString(“memo”, aTextView.getText().toString());
editor.putInt(“xposition”, x);
editor.commit();

説明:
“MemoPrefs”という名前のxmlファイルを呼び出して、pref.edit();でxmlファイルを編集できるようにします。次に、”memo”という名前のデータにテキストビューの文字列を代入し、”xposition”のデータにxの値を代入しています。最後に、editor.commit();して、実行しています。また、データの書き込みはonStopメソッドの中で処理を行うのが一般的みたいです。

◆SharedPreferencesで保存したデータは、
アプリを実行した状態で、「Eclipse」の「DDMS」→「ファイル・エクスプローラー」タブを選択する。

フォルダ「data」→「data」→「パッケージ名」→「shared_prefs」→「MemoPrefs.xml」に保存されています。

中身を見る場合は、MemoPrefs.xmlを選択し、「ファイル・エクスプローラー」タブの横にあるアイコン(マウスを乗せるとPull a file from the deviceと表示される)をクリックし、任意の場所にエクスポートします。◆

ブログ記事「タッチパネルの位置情報を調べる」のサンプルに、SharedPreferencesを使ったデータの保存と書き込み機能を加えてみました。

*src/com.example.android.sample/Sample.javaの変更後の全ソース:

package com.example.android.sampletwo;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

public class SampleTwo extends Activity {
 private TextView aTextView;
 private TextView bTextView;
 private char[] charactor = new char[4];
 private String moji;
 private int x, y;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);

        aTextView = (TextView) findViewById(R.id.myTextView);
     bTextView = (TextView) findViewById(R.id.myTextPosition);

        //データの書き込み
     SharedPreferences pref = this.getSharedPreferences("MemoPrefs", MODE_PRIVATE);
     aTextView.setText(pref.getString("memo", ""));
     bTextView.setText("X:" + pref.getInt("xposition", 0) + " Y:" + pref.getInt("yposition", 0));
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

     x = (int)event.getX();
     y = (int)event.getY();

     switch (event.getAction()) {

      case MotionEvent.ACTION_DOWN:
       charactor[0] = (char)(68); //D
       charactor[1] = (char)(79); //O
       charactor[2] = (char)(87); //W
       charactor[3] = (char)(78); //N
       moji = String.valueOf(charactor);
       aTextView.setText(moji);
       bTextView.setText("X:" + x + " Y:" + y);
       break;

      case MotionEvent.ACTION_UP:
       charactor[0] = (char)(85); //U
       charactor[1] = (char)(80); //P
       charactor[2] = (char)(32); //スペース
       charactor[3] = (char)(32); //スペース
       moji = String.valueOf(charactor);
       aTextView.setText(moji);
       bTextView.setText("X:" + x + " Y:" + y);
       break;

      case MotionEvent.ACTION_MOVE:
       charactor[0] = (char)(77); //M
       charactor[1] = (char)(79); //O
       charactor[2] = (char)(86); //V
       charactor[3] = (char)(69); //E
       moji = String.valueOf(charactor);
       aTextView.setText(moji);
       bTextView.setText("X:" + x + " Y:" + y);
       break;

      case MotionEvent.ACTION_CANCEL:
       aTextView.setText("ACTION_CANCEL");
       break;

       }

     return super.onTouchEvent(event);
     }

    protected void onStop() {
     super.onStop();

     //データの保存
     SharedPreferences pref = this.getSharedPreferences("MemoPrefs", MODE_PRIVATE);
     SharedPreferences.Editor editor = pref.edit();
     editor.putString("memo", aTextView.getText().toString());
     editor.putInt("xposition", x);
     editor.putInt("yposition", y);
     editor.commit();
    }

}

中堅サーバエンジニア

中堅サーバエンジニア現在Unity勉強中

都内で10数年、Web系のアプリケーション開発をしています。 プログラミング、ゲーム、株とかのブログを書いています。

関連記事

コメント

この記事へのコメントはありません。