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 とほぼ変わりがないだろうと思う。
必要になったら、作るとしよう。