閉じる

AssetManager#openXmlResourceParserで例外(FileNotFoundException)

何も考えずに assetsディレクトリへ XMLファイルをつっこんで、openXmlResourceParserで読み込もうとすると java.io.FileNotFoundExceptionが。
core\java\android\content\res\AssetManager.javaに含まれる openXmlResourceParserの実装を読んでみると…「Retrieve a parser for a compiled XML file.」というコメントが。
あー、テキスト形式ではなく、事前にコンパイルされた XMLを読み込むメソッドなのね。
オフィシャルのドキュメント( openXmlResourceParser )にも書いてあるわ。
テキスト形式のを読み込みたいのなら、素直に AssetManager#openで InputStreamを得て、XmlPullParserを作る必要があると。

2013/03/03追記

その場は openを使ってお茶を濁したけど、「なら、事前のコンパイルはどうやって行うの?」という疑問は残るので調べてみた…が、事前にコンパイルする方法なんてどこにも載ってない。

使用事例を調べていった結果、自分が持っている XMLを読み込むのではなく、PackageManager等を使って自分以外の apk*1 のリソースを得て、そこに含まれるコンパイル済み XML*2 を読み込むという使い方をするようね。


*1 まぁ 自分自身でもいいのだけど

*2 たとえば AndroidManifest.xml

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)