AndroidのSharedPreferencesの使用保存ユーザー設定

6101 ワード

SharedPreferencesはAndroidプラットフォーム上の軽量級のストレージクラスで、主にウィンドウ状態などの一般的な構成を保存しています.一般的にActivityでウィンドウ状態onSaveInstanceState保存はSharedPreferencesで一般的に行われています.Androidプラットフォームの通常のLong長整形、Int整形、String文字列型の保存を提供しています.どのような処理方式ですか.SharedPreferencesは、過去のWindowsシステム上のiniプロファイルに似ていますが、グローバル共有アクセスが可能な複数の権限に分かれています.android 123は、最終的にxmlで保存されることを示しています.全体的な効率は特に高くありません.通常の軽量レベルではSQLiteよりも多く、実際のストレージ量が少ない場合は、自分で定義したファイルフォーマットを考慮することはできません.xml処理時にDalvikは、XML pull方式などの最下位レベルのローカルXML Parser解析を行うことで、メモリリソースの使用に適しています.
この方法は、最も簡単なAndroidで外部データを読み書きする方法であるはずです.彼の使い方は基本的にJ 2 SE(java.util.prefs.Preferences)の使い方と同じで、ユーザーがカスタマイズしたフォント、色、位置などのパラメータ情報を簡単で透明な方法で保存します.一般的なアプリケーションでは、「設定」や「プリファレンス」というインタフェースが提供されています.これらの設定は最後にPreferencesで保存できますが、プログラマーはどのような形式で保存されているのか、どこに保存されているのかを知る必要はありません.もちろん、他のものを保存したいなら、制限はありません.ただ、性能的には何が問題なのか分かりません.
Androidシステムでは、これらの情報はXMLファイルとして/data/data/PCMAGE_に保存されています.NAME/shared_prefsディレクトリの下.
以下は小さなdemoです
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
	
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/name"/>
    
    <EditText 
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"/>

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/age"/>
    
    <EditText 
        android:id="@+id/age"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"/>
    
    <Button 
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="save"
        android:text="@string/save"/>
    
</LinearLayout>

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">ShardPerference</string>
    <string name="menu_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
	<string name="name">  </string>
	<string name="age">  </string>
	<string name="save">  </string>
</resources>

main.activity

package com.shardperference.example;

import java.io.IOException;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.shardperference.service.PreferencesService;

public class MainActivity extends Activity {
	private EditText edit_name, edit_age;
	private PreferencesService ps;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		edit_name = (EditText)findViewById(R.id.name);
		edit_age = (EditText)findViewById(R.id.age);
		ps = new PreferencesService(this);
		initData();
	}
	private void initData(){
		Map<String, String> data = ps.initData();
		String name = data.get("name");
		int age = Integer.parseInt(data.get("age"));
		edit_name.setText(name);
		edit_age.setText(age + "");
	}
	
	public void save(View view){
		String name = edit_name.getText().toString();
		int age = Integer.valueOf(edit_age.getText().toString());
		try {
			ps.save(name, age);
			Toast.makeText(MainActivity.this, "save success", Toast.LENGTH_LONG).show();
		} catch (IOException e) {
			Toast.makeText(MainActivity.this, "save error", Toast.LENGTH_LONG).show();
			e.printStackTrace();
		}
	}
	
}


PreferencesService.class

package com.shardperference.service;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class PreferencesService {
	private Context context;
	
	public PreferencesService(Context context) {
		this.context = context;
	}

	public void save(String name, int age) throws IOException{
		SharedPreferences sp = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
		Editor editor = sp.edit();
		editor.putString("name", name);
		editor.putInt("age", age);
		editor.commit();
	}
	
	public Map<String, String> initData(){
		Map<String, String> data = new HashMap<String, String>();
		SharedPreferences sp = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
		data.put("name", sp.getString("name", ""));
		data.put("age", String.valueOf(sp.getInt("age", -1)));
		return data;
	}
}