如何在Android上解析来自SdCard的矢量XML

时间:2016-08-13 02:15:05

标签: android xml-parsing android-vectordrawable

我还没有在Stackoverflow的其他线程中找到一个断言响应。

有很多方法可以从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 / drawables测试): http://beetxt.com/N4c

3)这就是我调用方法的方法:

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/

我希望有一个解决方案。

提前致谢。

更新
现在我重新启动aplication并收到一个新错误。 LOL

这就是我收到的内容:java.lang.ClassCastException:android.util.XmlPullAttributes无法强制转换为android.content.res.XmlBlock $ Parser

这是一个测试项目,您可以在其中看到错误github.com/denebchorny/vectorxmltest/tree/master

1 个答案:

答案 0 :(得分:0)

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

如果要从SDCard加载矢量,一种解决方案可能是创建具有此矢量文件的PDF。在SDCard上放置该PDF并使用PDFRenderer类打开它以在位图中呈现页面。这样您就可以获得所需大小的缩放位图。但是这只能在API 21之后才能使用,因为在API21中添加了PdfRenderer类。到目前为止,PdfRenderer还没有compat库。