2016-08-13 52 views
0

我还没有在Stackoverflow的其他线程中找到自信的响应。如何在Android上从SdCard解析矢量XML

有很多方法可以从sdcard中取出xml,但我收到相同的错误。我不明白为什么会发生这种情况。

1)这是我使用的方法:

public XmlPullParser xmlVectorFromResource() throws FileNotFoundException, IOException { 
     try { 
      String data; 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      File file = new 

      // testing loading a .xml from DCMI 
      File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "/cityscape.xml"); 
      FileInputStream fis = new FileInputStream(file.getPath()); 
      InputStreamReader isr = new InputStreamReader(fis); 

      char[] InputBuffer = new char[fis.available()]; 
      isr.read(InputBuffer); 
      data = new String(InputBuffer); 
      isr.close(); 
      fis.close(); 
      XmlPullParser xpp = null; 
      xpp = factory.newPullParser(); 
      xpp.setInput(new StringReader(data)); 
      return xpp; 
     } catch (XmlPullParserException ex) { 
      ex.printStackTrace(); 
     } 
     return null; 
    } 

2)这是我想要的载体。这是一个有效的(我从RES测试/绘项目): http://beetxt.com/N4c

3)这是怎么了callind方法:

XmlPullParser drawable = null; 
try { 
    drawable = xmlVectorFromResource(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
if (drawable != null) { 
    try { 
     mImageview.setImageDrawable(VectorDrawableCompat 
      .createFromXml(holder.cardView.getResources() 
       , drawable)); 
    } catch (XmlPullParserException e1) { 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
} else { 
    Log.d(TAG, "Wapawm, problems"); 
} 

4),这是我收到的错误: http://www.beetxt.com/ape/

我希望有一个解决方案。

在此先感谢。

UPDATE
现在我重新启动aplication和接收新的错误。 LOL

这是我收到什么:java.lang.ClassCastException:android.util.XmlPullAttributes不能转换到android.content.res.XmlBlock $分析器

下面是一个测试项目,你可以看到错误github.com/denebchorny/vectorxmltest/tree/master

+0

错误信息是什么样的? –

+0

@ vtd-xml-author对不起,延迟。我在这里发布错误:http://www.beetxt.com/ape/,但本质上是W/System.err:org.xmlpull.v1.XmlPullParserException:找不到开始标记。我正在使用有效的向量。我测试过了。可能是什么? –

+0

我需要这样加载一个向量,因为我试图从sdcard加载它并通过路径检查路径来查找和比较特定的TAG。 –

回答

0

无法使用调用createFromXml从SDcard加载xml。此调用适用于res或drawable文件夹中的XML文件。它不工作的原因是,当我们创建apk时,矢量XML被转换为二进制格式get和createFromXml,理解改变后的二进制格式。

如果你想从SDCard加载一个矢量,一个解决方案可能是创建一个带有这个矢量文件的PDF。在PDF文件中打开PDF并使用PDFRenderer类打开它,以便在页面中显示页面。这样你可以得到所需大小的缩放位图。但是这只能在API 21或更高版本之后作为PdfRenderer类添加到API21中才能使用。截至目前,还没有PdfRenderer的compat库。

+0

谢谢。实际上有一种方法可以通过HTTP REQUEST加载Vector。很快我会发布和示例。我正在考虑尝试创建一个LOCAL HTTP REQUEST(如果可能,请使用IDK)来加载XML。 或者使用Unity或其他工具来开发支持向量的交叉平台。你知道任何支持它的工具吗? –

+0

对不起,我没有探讨过,也不知道。一旦你准备好了一个例子,请分享这篇文章。 –