2017-06-03 9 views
1

Androidのデスクトップアプリケーション用に作成されたjarを使用しています。Androidのインポートされたjarからリソースを読み取る

このjarファイルは、いくつかの構成ファイルが含まれており、上記のコードは、デスクトップアプリケーションでは正常に動作しますが、インポートされたライブラリとしてAndroid上で使用された場合には、以下を与える

(code from .jar) 

InputStream fXmlFile = Object.class.getResourceAsStream("/aaa/config/interface_config.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
        .newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 

を介してそれらを読んで:

06-02 05:36:44.748: W/System.err(12001): java.lang.IllegalArgumentException: InputStream cannot be null 
06-02 05:36:44.748: W/System.err(12001): at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:103) 

そのことを示唆しているObject.class.getResourceAsStream("/aaa/config/interface_config.xml") 返されますnull

私は内部を見た生成されたapkと/aaa/config/interface_config.xmlが存在します。

私の質問は、Object.class.getResourceAsStreamはAndroidで期待どおりに動作しますか?私が期待していたのはgetResourceAsStream("absolutePath")であり、通常は瓶の中にあるので、"absolutePath"のリソースをapkの中に返すことです。

答えて

1

Objectをロードするために使用されるクラスローダーを使用していますが、これはクラスをロードしたクラスローダーと同じでない場合があります。

リソースは、このコードが含まれ、そのクラスがロードされたのと同じ瓶からのものである場合に行を変更:

InputStream fXmlFile = getClass().getResourceAsStream("/aaa/config/interface_config.xml"); 
+0

説明のおかげで、私はこれを欠けていた、それはそれを解決しました。 – Yggdrasil