SharedPreferencesモドキを作ろう

 XmlSerializer なんかをイジって、xml 関係がだいたい飲み込めた。
 しかし、データ・フォーマットを考えるのはめんどくさい。読み込み部が専用になるのも、なんかアレよね。
 読み込みは遅いが、やっぱ融通の効くSharedPreferences は便利だ。
 しかし、SharedPreferences は外部ファイルを読み込めない…。
 なら作ってしまえ、というワケ。
 どうせint とString しか使う予定もないし。
 そんなに面倒でもないだろう。

package com.migimaki.android;

import android.content.Context;

import java.io.FileInputStream;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;

import android.util.Log;


/*
 * Preferences Reader クラス
 * 
 */
public class PrefReader {

	private Context context;
	public String fPath = "/";

//====================
//初期化
//====================
	/**
	 * コンストラクタ
	 */
	public PrefReader( Context c, String fPath ){
		context = c;
		this.fPath = fPath;
		//--
	}


//====================
// read method
//====================

	////////////
	/// Read Int
	public int getInt( String key, int default_i ){

		int result = default_i;
		//--

		try{
			FileInputStream is = new FileInputStream( fPath );
			XmlPullParser xmlPullParser = Xml.newPullParser();
			xmlPullParser.setInput( is, "UTF-8" );

			
			int i = xmlPullParser.getEventType();
			do{
				if( i == XmlPullParser.START_TAG 
						&& xmlPullParser.getName().equals( "int" )
							&& xmlPullParser.getAttributeValue( null, "name" ).equals( key )
					){

						result = Integer.parseInt( xmlPullParser.getAttributeValue( null, "value" ) );
						break;
				}
				i = xmlPullParser.next();
			}while ( i != XmlPullParser.END_DOCUMENT );

			is.close();

		}catch( Exception ex ){
			Log.d( "Err", "PrefReader : getInt" );
		}
		//--
	//	Log.d( "TEST", "PrefReader " +key +":" +result );
		return result;
	}
	///==
	
	////////////
	/// Read String
	public String getString( String key, String default_s ){

		String result = default_s;
		//--

		try{
			FileInputStream is = new FileInputStream( fPath );
			XmlPullParser xmlPullParser = Xml.newPullParser();
			xmlPullParser.setInput( is, "UTF-8" );

			
			int i = xmlPullParser.getEventType();
			do{				
				if( i == XmlPullParser.START_TAG 
						&& xmlPullParser.getName().equals( "string" )
							&& xmlPullParser.getAttributeValue( null, "name" ).equals( key )
					){

						result = xmlPullParser.nextText();
						break;
				}
				i = xmlPullParser.next();
			}while ( i != XmlPullParser.END_DOCUMENT );

			is.close();
			
		}catch( Exception ex ){
			Log.d( "Err", "PrefReader : getString" );
		}
		//--
	//	Log.d( "TEST", "PrefReader " +key +":" +result );
		return result;
	}
	///==
	
}

 できた。int とString だけだけど。(w

 各method でFileInputStream を設定しているのは、そうしないと読み込み位置が保持されてしまうため。

 SharedPreferences には、int とString の他に、boolean, float などなどがある。
 それらはおそらく、int とほぼ変わりがないだろうと思う。
 必要になったら、作るとしよう。

Comments are closed.