現時点では少し混乱しています。XMLファイルを受け取り、そのコンテンツをsqliteデータベースに保存したいと思います。非常に一般的に聞こえると思います。私は基本的に次のことを行うDBAdapterを持っています
private static class DatabaseHelper extends SQLiteOpenHelper
{
private final Context ctx;
DatabaseHelper(Context context)
{
super(context, Constants.DB_NAME, null, Constants.DB_VERSION);
this.ctx = context;
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("create table mytable (_id integer primary key autoincrement, field text not null, field2 text not null );");
fillDb(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//not relevant here so skip it
}
private void fillDb(SQLiteDatabase db)
{
InputStream rawInput = this.ctx.getResources().openRawResource(R.raw.data);
SAXParserFactory factory = SAXParserFactory.newInstance();
try
{
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(rawInput, new HandlerXmlData());
}
catch(Exception e)
{
//not relevant here so skip it
}
//this manual entries would work here
//ContentValues values = new ContentValues();
//values.put("field", "aaa");
//values.put("field2", "bbb");
//db.insert("mytable", null, values);
}
問題は、SAXParser内にあることです。
パブリッククラスHandlerXmlDataはDefaultHandlerを拡張します{
private String currentValue = "";
public void startDocument()
{
}
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
{
}
public void characters(char[] ch, int start, int length)
{
currentValue = new String(ch, start, length);
//here I get the value from my XML
//so I need something like db.insert(...)
}
public void endElement(String uri, String localName, String qName)
{
}
そのため、SAXParser内では、DatabaseHelperクラスにあるdbオブジェクトにアクセスできません。これらをまとめるにはどうすればよいですか?
ありがとう、A。