2017-02-21 131 views
3

我想從我的Android項目中的jar文件中讀取可繪製的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)應該可以解決問題。