2017-02-21 20 views
3

私はアンドロイドプロジェクトのjarファイルからdrawable xmlファイルを読み込もうとしています。XmlPullParserExceptionサポートされていない機能

private Drawable readDrawableFromJar(String p_strFilePath) { 
     InputStream stream = getClass().getClassLoader().getResourceAsStream(p_strFilePath); 
     XmlPullParser parser = null; 
     try { 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      factory.setValidating(true); 
      factory.setNamespaceAware(true); 
      parser = factory.newPullParser(); 
      parser.setInput(stream, "UTF-8"); 
     } catch (XmlPullParserException e) { 
      Log.e(LOG_TAG, "there is something for " + p_strFilePath + " " + e); 
     } 


     Drawable drawable = null; 
     try { 
      if (parser != null) { 
       drawable = VectorDrawableCompat.createFromXml(getContext().getResources(), parser); 

       return drawable ; 
      } else { 
       Log.e(LOG_TAG, "parser is null for " + p_strFilePath); 
      } 

     } catch (XmlPullParserException e) { 
      Log.e(LOG_TAG, "there is something for " + p_strFilePath + " " + e); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "there is something for " + p_strFilePath + " " + e); 
     } 
     return null; 
    } 

この方法では、ファイル内でテキストを読み取ることができます。それは、入力設定されている場合しかし、それは、以下の例外がスローされます。

org.xmlpull.v1.XmlPullParserException: unsupported feature: http://xmlpull.org/v1/doc/features.html#validation (position:START_DOCUMENT [email protected]:1) 

xmlファイルは、このような任意のテキストが含まれていないので、それは本当に奇妙だ:http://xmlpull.org/v1/doc/features.html#validation

これが配置されているXMLファイルです瓶の中で

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:viewportWidth="24" 
    android:viewportHeight="24" 
    android:width="24dp" 
    android:height="24dp"> 
    <path 
     android:pathData="M12 3C7.031 3 3 7.027 3 12.001 3 16.967 7.031 21 12 21 16.971 21 20.999 16.967 20.999 12.001 20.998 7.027 16.971 3 12 3m0 20C5.925 23 1 18.073 1 12.001 1 5.925 5.925 1 12 1 18.077 1 23 5.925 23 12.001 22.998 18.073 18.076 23 12 23" 
     android:fillColor="#242838" /> 
    <path 
     android:pathData="M13 18h-2v-7h2z" 
     android:fillColor="#242838" /> 
    <path 
     android:pathData="M10 10h3v2h-3z" 
     android:fillColor="#242838" /> 
    <path 
     android:pathData="M10 16h4v2h-4z" 
     android:fillColor="#242838" /> 
    <path 
     android:pathData="M11 6h2v2h-2z" 
     android:fillColor="#242838" /> 
</vector> 

答えて

5

あなたが直面している問題は、検証しているXMLファイルの内容とは関係ありません。代わりに、XmlPullParserFactory.setValidating(true)行が例外の原因になっているようです。この行がすることは、XMLを検証するために作成されたパーサを設定することです。残念ながら、XmlPullParserFactory.newPullParser()によって作成されたパーサーの実装は、検証をサポートしていないようです。あなたのコードにfactory.setValidating(true)という行をコメントすると問題が解決するはずです。

関連する問題